条件类型(Conditional Types)和 infer 关键字怎么用?

条件类型形如 T extends U ? X : Y,根据类型关系二选一;infer 用于在 extends 中推断并捕获子类型。

type IsString<T> = T extends string ? true : false

// 提取数组元素类型
type ElementOf<T> = T extends (infer E)[] ? E : T
type A = ElementOf<string[]>   // string

// 提取函数返回值
type ReturnOf<T> = T extends (...args: any[]) => infer R ? R : never
type R = ReturnOf(() => number)  // number

// 内置工具类型实现
type MyParameters<T> = T extends (...args: infer P) => any ? P : never

分发(distributive):裸类型参数(如 T)在联合类型上会逐成员分发:type T = IsString<string | number> 会变成 true | false。加 [T] 包裹可关闭分发。

同分类其他题目