export interface DeferredPromise extends Promise { resolve(value: T | PromiseLike): void; reject(reason?: any): void; } export function createDeferredPromise(): DeferredPromise { let res: (value: T | PromiseLike) => void; let rej: (reason?: any) => void; const promise = new Promise((resolve, reject) => { res = resolve; rej = reject; }) as DeferredPromise; promise.resolve = res!; promise.reject = rej!; return promise; }