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

TypeScript定义枚举为键的泛型字典触发类型错误如何解决?

问题原因

你定义泛型类型时没有给泛型参数AnyEnum添加类型约束,TypeScript默认无法确定你传入的AnyEnum是可以作为对象键的合法类型(只有string/number/symbol及它们的联合类型、枚举类型可以作为对象键),因此触发了类型报错。这个问题不属于配置遗漏,是TypeScript泛型的基础规则要求。

解决方法

给泛型参数添加extends string | number | symbol的约束即可,你也可以直接使用TS内置的PropertyKey类型(它本身就是string | number | symbol的别名,写法更简洁)。

修正后的完整代码如下:

enum MyKeys {
  FOO = 'FOO',
  BAR = 'BAR',
}

type MyDictionnary = {
    [prop in MyKeys]: string
}

const dictionnary: MyDictionnary = {
    [MyKeys.FOO]:'hello',
    [MyKeys.BAR]: 'world'
}

// 加泛型约束的写法1
type GenericDictionnary<AnyEnum extends string | number | symbol> = {
    [prop in AnyEnum]: string
}

// 写法2:用内置PropertyKey简化代码
type GenericDictionnary2<AnyEnum extends PropertyKey> = {
    [prop in AnyEnum]: string
}

// 验证使用示例
const testDict: GenericDictionnary<MyKeys> = {
    FOO: '测试内容1',
    BAR: '测试内容2'
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:48:04