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

TypeScript中是否支持在泛型内部嵌套使用另一个泛型?

问题解答

结论

当前所有稳定版本的 TypeScript 都支持在泛型内部嵌套使用其他泛型变量,你第一种写法报错属于语法使用错误,不是特性不支持。

错误原因

你尝试将泛型参数 <Result> 直接写在泛型类型 LamdaFn 前方,不符合 TypeScript 类型语法规范:泛型参数必须声明在函数类型定义的位置,或是外层类型的参数列表中,不能直接附加在已定义的泛型类型前。

可行实现方案

如果你想复用 LamdaFn 来定义 map 的类型,可以通过抽离通用泛型函数类型的方式实现,最终效果和你当前可运行的写法完全等价:

type LamdaFn<Value, Result> = (x: Value) => Result;

// 抽离通用的带泛型的Map函数类型
type GenericMapFn<InputType, ReturnType> = <Result>(fn: LamdaFn<InputType, Result>) => ReturnType;

type None = {
    // 直接使用预定义的泛型类型,符合你期望的简化写法
    map: GenericMapFn<null, None>
}

如果你不需要复用这个map的类型,你原有的第二种写法就是官方推荐的标准实现,两种写法的类型检查效果完全一致,没有性能或可维护性差异。

类型验证

以上定义的类型调用时可以正常推导泛型,符合预期逻辑:

const none: None = {
  map: (fn) => none
}

// 调用时泛型参数Result会自动推导为 string | undefined
const result = none.map(x => x?.toString())
// result 类型会被正确识别为 None

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:54:03