export type Deferred = { resolve: (value: T) => void; reject: (reason: any) => void; promise: Promise; }; export function defer() { const deferred: Deferred = Object.create(null); deferred.promise = new Promise((resolve, reject) => { deferred.resolve = resolve; deferred.reject = reject; }); return deferred; }