[typescript] 타입 유틸

HYUNGU, KANG·2021년 10월 12일
0

인터페이스의 함수를 모두 비동기(프로미스 리턴) 함수로 변경하기

type PromisifyInterface<T extends Record<any, any>> = {
    [K in keyof T]: T[K] extends (...args: any) => infer R
        ? (...args: Parameters<T[K]>) => R extends Promise<any> ? R : Promise<R>
        : T[K];
};

실행

interface TestInterface {
    some(p1: number): void;
    foo(p1: string): number;
    bar(p1: string[]): string[];
    zoo: number;
}
type Promisified = PromisifyInterface<TestInterface>;

// type Promisified = {
//     some(p1: number): Promise<void>;
//     foo(p1: string): Promise<number>;
//     bar(p1: string[]): Promise<string[]>;
//     zoo: number;
// }
profile
JavaScript, TypeScript and React-Native

0개의 댓글