对泛型应用泛型:TypeScript类型推导技术问询
TypeScript泛型类型推导问题
给定如下泛型类型Fn,它接收另一个泛型Idiot作为输入。是否存在一种方式,随后将泛型A_应用到该泛型Idiot上,从而推导正确的类型?
type Fn = <Idiot extends <A>(a:A)=>A>( inputFn: (i:any)=>Idiot )=><A_>(a: Parameters<Idiot<A_>>)=>ReturnType<Idiot<A_>>
解决方案与分析
可以通过简化类型定义让A_正确绑定到Idiot的泛型参数上,直接利用Idiot的泛型特性推导类型,无需借助Parameters和ReturnType绕弯:
type Fn = <Idiot extends <A>(a: A) => A>( inputFn: (i: any) => Idiot ) => <A_>(a: A_) => Idiot<A_>
说明:
- 原定义中
Idiot<A_>本质是(a: A_) => A_类型的函数,因此直接将返回函数的参数类型指定为A_,返回类型指定为Idiot<A_>,TypeScript就能自动完成类型推导。 - 调整后的定义更直观,也能确保
A_的类型正确传递给Idiot的泛型参数,避免不必要的类型工具函数调用。
内容的提问来源于stack exchange,提问作者TrevTheDev
相关产品推荐
相关产品推荐

