GetReturnType
题目
Github: Get return type
不使用 ReturnType
实现 TypeScript
的 ReturnType<T>
泛型。
const fn = (v: boolean) => {
if (v) return 1
else return 2
}
type a = MyReturnType<typeof fn> // 应推导出 "1 | 2"
解题思路
通过使用条件类型中的类型推断,泛型参数 T
是否可以分配给 () => void
,通过类型参数从条件类型推断为真时,获取函数返回类型, () => infer R
。同时,我们并不关心函数是否带参数,所以还需要添加 ...args: any[]
表示可以接受任何参数。
答案
type MyReturnType<T> = T extends (...args: any[]) => infer R ? R : never