export default class Deferred { promise: Promise; reject!: (reason?: any) => void; resolve!: (value: T | PromiseLike) => void; constructor() { this.promise = new Promise((resolve, reject) => { this.reject = reject; this.resolve = resolve; }); } static resolved(): Deferred; static resolved(value: T): Deferred; static resolved(value?: T): Deferred { const deferred = new Deferred(); deferred.resolve(value); return deferred; } }