export interface PromiseGate { readonly promise: Promise; readonly resolve: (value: T | PromiseLike) => void; readonly reject: (reason?: unknown) => void; } interface PromiseConstructorWithResolvers extends PromiseConstructor { withResolvers(): PromiseGate; } export function promiseGate(): PromiseGate { return (Promise as PromiseConstructorWithResolvers).withResolvers(); }