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

TypeScript中能否将enum枚举作为泛型参数传入自定义type?

问题结论

你完全可以将enum作为泛型参数传入自定义type,报错是因为你没有给泛型T添加符合Record参数要求的类型约束。

报错原因

TS内置的Record工具类型,第一个类型参数要求必须是可作为对象键的类型,也就是string | number | symbol的子类型。你定义泛型T时没有加任何约束,TS无法保证你传入的所有T都满足Record的参数要求,因此抛出类型错误。

修正后的代码

enum A {
  a = 'a',
  b = 'b',
}

// 给泛型T添加 extends 约束,默认值保持为A即可
type B<T extends string | number | symbol = A> = {
  values: Record<T, string>;
}

使用示例

// 传入枚举作为泛型参数,符合类型要求
const someVar: B<A> = {
  values: {
    [A.a]: "a的对应值",
    [A.b]: "b的对应值"
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 20:06:05