export interface Defer { resolve(value?: T | PromiseLike): void; reject(reason?: any): void; promise(): Promise; } export function createDefer(): Defer { const r: any = {}; const promise = new Promise((resolve, reject) => { r.resolve = resolve; r.reject = reject; }); r.promise = () => promise; return r; }