You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为高阶函数返回的泛型函数变量设置泛型类型?

解决方案

要让getB成为可指定泛型的函数,同时避免手动声明复杂类型,只需调整高阶函数generator的泛型定义逻辑,将泛型参数从generator本身转移到它返回的函数上:

function generator() {
  return <T>(b: T) => b;
}

// typeof getB = <T>(b: T) => T
const getB = generator();

// typeof getNumber = (b: number) => number
const getNumber = getB<number>;

getNumber("hello"); // 类型报错:"string"类型参数无法赋值给"number"类型参数
getNumber(1142); // 正常运行

// typeof getString = (b: string) => string
const getString = getB<string>;

getString("hello"); // 正常运行
getString(1142); // 类型报错:"number"类型参数无法赋值给"string"类型参数

原理说明

原代码中,generator<B>()的泛型参数B在调用generator()时会被自动推断为unknown(既没手动指定类型,也无上下文可推导),因此返回的函数类型被固定为(b: unknown) => unknown。

修改后的generator不再声明自身的泛型参数,转而让它返回的函数成为泛型函数。此时调用generator()得到的getB本身就是一个泛型函数,后续使用时通过<T>指定具体类型即可,TypeScript会自动推导并约束函数的参数与返回值类型,彻底规避了手动声明复杂类型带来的代码脆弱问题。

内容的提问来源于stack exchange,提问作者Nick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 22:12:40