🧪 Frontend Lab
交互式前端学习实验室

条件类型

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
内置的 ReturnTypeParameters 就是用条件类型实现的。