如何推断TypeScript条件返回类型函数的特定返回类型
解决泛型函数类型特定参数下的返回类型获取问题
你定义的X是泛型函数类型(泛型参数绑定在函数签名上),不是泛型类型,所以没法直接用X<true>这种语法来获取返回类型。下面给两种可行的解决方法:
方法1:自定义工具类型提取返回类型
不用修改原X的定义,通过条件类型结合infer来提取特定参数对应的返回类型:
type X = <A extends boolean>(x: A) => A extends true ? string : boolean; // 自定义工具:传入函数类型和目标参数类型,返回对应返回值类型 type GetReturnForArg<Fn, Arg> = Fn extends (x: Arg) => infer R ? R : never; // 使用示例 type Z = GetReturnForArg<X, true>; // 类型为string type Y = GetReturnForArg<X, false>; // 类型为boolean
这个工具类型的逻辑很简单:判断函数是否能接受指定类型的参数,是的话就提取它的返回类型,刚好匹配原函数的条件返回逻辑。
方法2:改造原类型为泛型类型
如果允许调整原类型的结构,把泛型参数移到类型本身,就能更贴近你想要的写法:
// 将泛型参数A绑定到类型X上,变成泛型类型 type X<A extends boolean> = (x: A) => A extends true ? string : boolean; // 先指定泛型参数,再用ReturnType提取返回类型 type Z = ReturnType<X<true>>; // string type Y = ReturnType<X<false>>; // boolean
这种方式先通过X<true>得到接受true参数的函数类型,再用ReturnType工具提取它的返回值类型,逻辑更直观。
内容的提问来源于stack exchange,提问作者NirG
相关产品推荐
相关产品推荐

