class ReadableStream<T> {
// ...
debounce(milliseconds: number): ReadableStream<T[]>;
debounce<TOut>(milliseconds: number, join?: (list: T[]) => TOut): ReadableStream<TOut> {
let lastTime = Date.now();
let buffer: T[] = [];
return new ReadableStream<TOut>((push: (value: TOut) => void) => {
return this.subscribe(value => {
const now = Date.now();
buffer.push(value);
if (now - lastTime < milliseconds) {
return null;
}
const joined = join ? join(buffer) : buffer;
// This line doesn't compile:
// Argument of type 'T[] | TOut' is not assignable to parameter of type 'TOut'.
// Type 'T[]' is not assignable to type 'TOut'.
push(joined);
buffer = [];
lastTime = now;
});
});
}
}