获取函数返回类型
不使用 ReturnType 实现 TypeScript 的 ReturnType<T> 泛型。
例如:
const fn = (v: boolean) => {
if (v)
return 1
else
return 2
}
type a = MyReturnType<typeof fn> // 应推导出 "1 | 2"
实现:
- 使用
extends约束泛型参数为任意函数:MyReturnType<T extends (...args: any) => any> - 使用
extends判断泛型参数T是否为函数,并使用infer推导出函数的返回类型
type AnyFn<T = any> = (...args: any) => T
type MyReturnType<T extends AnyFn> = T extends AnyFn<infer R> ? R : never