// eslint-disable-next-line import/no-unused-modules export type Deferred = PromiseLike & { resolve: (value: T | PromiseLike) => void reject: (reason?: unknown) => void } export function createDeferred(): Deferred { let resolve: (value: T | PromiseLike) => void let reject: (reason?: unknown) => void const promise = new Promise((_resolve, _reject) => { resolve = _resolve reject = _reject }) return { then: promise.then.bind(promise), resolve: (value) => resolve(value), reject: (reason) => reject(reason), } }