interface IDeferredPromise { resolve: (T) => void, reject: (T) => void, promise: Promise, } function DeferredPromise(): IDeferredPromise { this.promise = new Promise((resolve, reject) => { this.resolve = resolve; this.reject = reject; }); return this; }