原文链接: ts 使用infer 推断类型
上一篇: Jest 测试框架 简单使用 测试ts 和异步方法
下一篇: 理解和使用 ES6 中的 Symbol
推断promise返回的类型
type PromiseType<T> = (args: any[]) => Promise<T>;
type UnPromisify<T> = T extends PromiseType<infer U> ? U : never;
async function stringPromise() {
return "string promise";
}
async function numberPromise() {
return 1;
}
interface Person {
name: string;
age: number;
}
async function personPromise() {
return { name: "Wayou", age: 999 } as Person;
}
type extractStringPromise = UnPromisify<typeof stringPromise>; // string
type extractNumberPromise = UnPromisify<typeof numberPromise>; // number
type extractPersonPromise = UnPromisify<typeof personPromise>; // Person
介绍
infer
最早出现在此 PR 中,表示在 extends
条件语句中待推断的类型变量。
简单示例如下:
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) &#