@codelet/core
Version:
mini core
12 lines (11 loc) • 580 B
TypeScript
export type PromisifySuccessResult<P, T extends {
success?: (...args: any[]) => void;
}> = P extends {
success: any;
} ? void : P extends {
fail: any;
} ? void : P extends {
complete: any;
} ? void : Promise<Parameters<Exclude<T['success'], undefined>>[0]>;
export type PromisifyRestArgs<T> = T extends [any, ...args: infer P] ? P : never[];
export declare function promisify<T extends (...args: any[]) => any>(fn: T): <P extends Parameters<T>[0]>(options?: P | undefined, ...args: PromisifyRestArgs<Parameters<T>>) => PromisifySuccessResult<P, Parameters<T>[0]>;