infer
条件类型提供了 infer 关键字来推断类型,用于替代手动获取类型。TypeScript 为此提供了一个示例,他们创建了一个叫作 Flatten 的类型,用于将数组转成他们需要的元素类型:
type Flatten<T> = T extends any[] ? T[number] : T;
如果使用关键字 infer 就可以将上面的代码简化成:
type Flatten<T> = T extends Array<infer U> ? U : T;
示例
type ParamType<T> = T extends (param: infer P) => any ? P : T;
在这个条件语句 T extends (param: infer P) => any ? P : T
中,infer P
表示待推断的函数参数。
整句表示为:如果 T 能赋值给 (param: infer P) => any,则结果是 (param: infer P) => any 类型中的参数 P,否则返回为 T。
interface User {
name: string;
age: number;
}
type Func = (user: User) => void
type Param = ParamType<Func>; // Param = User
type AA = ParamType<string>; // string
最后更新于
这有帮助吗?