export function makeDeferred(): Deferred { let resolve: (value: T) => void; let reject: (reason?: unknown) => void; const promise = new Promise((_resolve, _reject) => { resolve = _resolve; reject = _reject; }); return { promise: promise, resolve: resolve!, reject: reject!, }; } export type Deferred = { promise: Promise; resolve: (value: T) => void; reject: (reason?: unknown) => void; };