条件类型
typescript · advanced · 15 min · Step 1/2条件类型
// 基本语法: T extends U ? X : Y
type IsString<T> = T extends string ? true : false;
// 实用:提取函数返回类型
type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
// 实用:提取 Promise 内部类型
type Awaited<T> = T extends Promise<infer U> ? Awaited<U> : T;
// 实用:提取数组元素类型
type ElementType<T> = T extends (infer E)[] ? E : never;
infer 关键字
infer 让你在条件中"捕获"一个类型:
type GetFirstArg<T> = T extends (first: infer F, ...rest: any[]) => any ? F : never;
type A = GetFirstArg<(name: string, age: number) => void>; // string
内置的ReturnType、Parameters就是用条件类型实现的。