export interface ResolvablePromise { promise: Promise resolve: (value: T | PromiseLike) => void reject: (reason?: unknown) => void } export function createResolvablePromise(): ResolvablePromise { let resolve: (value: T | PromiseLike) => void let reject: (reason?: unknown) => void const promise = new Promise((res, rej) => { resolve = res reject = rej }) return { promise, resolve: resolve!, reject: reject! } }