TS infer 关键字:解开类型推断的魔法
学习 TypeScript infer 关键字,在条件类型中提取和推断类型。 · 难度:入门 · +15XP
infer 关键字的作用
infer 关键字用于条件类型中,它允许我们从一个类型中推断出另一个类型。常用于提取函数返回类型、数组元素类型等。
基本语法
type ReturnType<T> = T extends (...args: any[]) => infer R ? R : never;
function greet() { return 'hello'; }
type GreetReturn = ReturnType<typeof greet>; // string
常见应用
| 模式 | 说明 | 示例 |
|---|---|---|
| 提取返回类型 | 从函数类型提取返回类型 | ReturnType<F> |
| 提取数组元素类型 | 从数组类型提取元素类型 | type Element<T> = T extends (infer U)[] ? U : never |
| 提取 Promise 值 | 从 Promise 提取内部值类型 | type PromiseValue<T> = T extends Promise<infer V> ? V : T |
代码示例
// 提取 Promise 内部类型
type Unwrap<T> = T extends Promise<infer U> ? U : T;
type Result1 = Unwrap<Promise<number>>; // number
type Result2 = Unwrap<string>; // string
// 提取函数参数类型
type FirstParam<T> = T extends (first: infer P, ...args: any[]) => any ? P : never;
function log(name: string, age: number) {}
type LogFirst = FirstParam<typeof log>; // string
练习提示
实现一个 ArrayItem 类型,接受一个数组类型,返回其元素类型。然后编写一个函数,使用该类型确保参数是字符串数组。