Skip to content

使用infer封装通用类型工具

自己实现ReturnType

ts
type Return<T> = T extends (...args: any[]) => infer R ? R : T;
type sum = (a: number, b: number) => number;
type concat = (a: any[], b: any[]) => any[];

let sumResult: Return<sum>; // number;
let concatResult: Return<concat>; // any[]

获取函数第一个参数类型

ts
type FirstArg<T> = T extends (x: infer F, ...args: any[]) => any ? F : T;

type fa = FirstArg<(name: number, age: number) => void>; // number;

返回Promise返回类型

ts
type PromiseType<T> = T extends Promise<infer R> ? R : T;

type pt = PromiseType<Promise<string>>;

返回Array类型

ts
type ArrayType<T> = T extends (infer U)[] ? U : T;

type ItemType1 = ArrayType<[string, number]>; // string | number;
type ItemType2 = ArrayType<string[]> // string;