export type Deferred = { promise: Promise; resolve(x: T): void; reject(r: any): void; }; export function createDeferred(): Deferred { let resolve: (x: T) => void; let reject: (r: any) => void; // tslint:disable-next-line:promise-must-complete let promise = new Promise((res, rej) => { resolve = res; reject = rej; }); return { promise, resolve, reject }; }