type resolveCallback<T> = (value: T) => void; type rejectCallback = (reason?: unknown) => void; export const newPromise = <T>(): [ Promise<T>, resolveCallback<T>, rejectCallback ] => { let resolve: resolveCallback<T>; let reject: rejectCallback; const promise = new Promise( (res: resolveCallback<T>, rej: rejectCallback) => { resolve = res; reject = rej; } ); return [promise, resolve!, reject!]; };