类型集子类型
在 TS 中,有些类型是一个类型集,比如 interface,function。TS 能够通过一些方式获取类型集的子类型。比如:
interface Person {
name: string;
}
// 获取子类型
const personName: Person['name'];
然而,对于函数子类型,TS 暂时没有直接的支持。不过江湖上有一种类型推断的方法,可以获取返回值类型。
虽然该方法可以说又绕又不够优雅,但是函数返回值类型的推导,能够更好地支持函数式编程,收益远大于成本。
type Reverse<T> = (arg: any) => T;
function returnResultType<T>(arg: Reverse<T>): T {
return {} as any as T;
}
// result 类型是 number
const result = returnResultType((arg: any) => 3);
type ResultType = typeof result;