fix(utils): createDeferred arg and return type

This commit is contained in:
Szymon Lesisz
2023-09-05 13:15:17 +02:00
committed by martin
parent bea2455f37
commit 7ca2fd07c7

View File

@@ -1,8 +1,23 @@
export const createDeferred = <T, P = string | number | undefined>(id?: P) => {
let localResolve: (t: T) => void = () => {};
export interface Deferred<Resolve = void, Arg = string | number | undefined> {
id: Arg;
promise: Promise<Resolve>;
resolve: (t: Resolve) => void;
reject: (e: Error) => void;
}
// unwrap promise response from Deferred
export type DeferredResponse<D> = D extends Deferred<infer R> ? R : never;
interface CreateDeferred {
<Resolve = void, Arg = undefined>(id?: Arg): Deferred<Resolve, Arg>;
<Resolve = void, Arg = string | number>(id: Arg): Deferred<Resolve, Arg>;
}
export const createDeferred: CreateDeferred = <Resolve, Arg>(id: Arg): Deferred<Resolve, Arg> => {
let localResolve: (t: Resolve) => void = () => {};
let localReject: (e?: Error) => void = () => {};
const promise: Promise<T> = new Promise((resolve, reject) => {
const promise: Promise<Resolve> = new Promise((resolve, reject) => {
localResolve = resolve;
localReject = reject;
});
@@ -14,13 +29,3 @@ export const createDeferred = <T, P = string | number | undefined>(id?: P) => {
promise,
};
};
export interface Deferred<T, P = string | number | undefined> {
id: P;
promise: Promise<T>;
resolve: (t: T) => void;
reject: (e: Error) => void;
}
// unwrap promise response from Deferred
export type DeferredResponse<D> = D extends Deferred<infer R> ? R : never;