Here is something I have been racking my head with the last few hours (with no success).
As mentioned in Using @daml/ledger with React Class Components I am trying to migrate to class components and hence cannot use hooks. I need to keep a Stream
member in my class.
The actual type of Stream
is pretty nasty like:
Stream<TransportationRecord, undefined, "827c178267266bb80711c560783b5391b5a3a45035176e251689366b6ce2ee85:Records:TransportationRecord", readonly CreateEvent<TransportationRecord, undefined, "827c178267266bb80711c560783b5391b5a3a45035176e251689366b6ce2ee85:Records:TransportationRecord">[]>
So far I have used this to get the type correct:
const getTransportationRecordStream = (ledger: Ledger) => ledger.streamQuery(TransportationRecord);
export type TransportationRecordStream = ReturnType<typeof getTransportationRecordStream>;
I don’t want to have to do this for every new type of Stream. So I started working on my own Stream
class:
class Stream<Templ extends Template<any,any,any>,
T extends object=(Templ extends Template<infer A,any,any> ? A : never),
K extends any =(Templ extends Template<any,infer A,any> ? A : never),
I extends string=(Templ extends Template<any,any,infer A> ? A : never)
> {
constructor(ledger: Ledger, template: Template<T, K, I>) {
this.ledger = ledger;
this.stream = ledger.streamQuery(template);
}
private ledger: Ledger;
private stream: DamlStream<T, K, I, readonly CreateEvent<T, K, I>[]>;
onLive(func: () => void) {
this.stream.on('live', func);
}
onChange(func: (results: ReadonlyArray<CreateEvent<T, K, I>>) => void) {
this.stream.on('change', func);
}
onClose(func: (closeEvent: StreamCloseEvent) => void) {
this.stream.on('close', func);
}
close() {
this.stream.close();
}
}
This was in the hope that I could simply define my stream as stream: Stream<TransportationRecord>
. Unfortunately I cannot get it to work; I think because TypeScript thinks I am using the export declare type TransportationRecord
as opposed to the export declare const TransportationRecord
from my DAML-generated javascript code.
Any help would be great! (TypeScript can be a real pain sometimes :’))