type Resolver = (value: T | PromiseLike) => void type Rejector = (error?: unknown) => void // eslint-disable-next-line @typescript-eslint/no-explicit-any export class Deferred { readonly promise: Promise private _state: "unresolved" | "resolved" | "rejected" = "unresolved" private _resolve!: Resolver private _reject!: Rejector constructor() { this.promise = new Promise((resolve, reject) => { this._resolve = resolve this._reject = reject }) } get state(): "unresolved" | "resolved" | "rejected" { return this._state } resolve = (value: T | PromiseLike): void => { if (this._state === "unresolved") { this._state = "resolved" this._resolve(value) } } reject = (error?: unknown): void => { if (this._state === "unresolved") { this._state = "rejected" this._reject(error) } } }