export type Deferred = Promise & { resolve: (arg: T) => void reject: (arg: T) => void } export const defer = (): Deferred => { let resolve, reject const p = new Promise((resolve_, reject_) => { resolve = resolve_ reject = reject_ }) return Object.assign(p, {resolve, reject}) as any }