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

TypeScript使用enum作为对象类型键时出现computed property name报错如何解决

报错原因
  • 语法规则冲突:[key in 类型]属于TypeScript的映射类型语法,不能和普通静态属性声明写在同一个对象类型字面量中,必须通过交叉类型合并两类属性的定义。
  • 枚举定义错误:你当前定义的CID是默认数字枚举,成员实际值为0、1、2,并非你预期的国家字符串前缀,即便语法修正后也无法匹配sg、tw这类字符串键。
修复方案

第一步:修正键的类型定义,保证值为对应的国家前缀字符串,两种写法可选:

// 写法1:字符串枚举,适合需要枚举特性的场景
enum CID {
  tw = 'tw',
  sg = 'sg',
  vn = 'vn',
}

// 写法2:字符串字面量联合类型,代码更简洁,适合简单的键集合场景
type CID = 'tw' | 'sg' | 'vn'

第二步:用交叉类型合并必填的default属性和可选的国家前缀属性定义,也可以借助Record工具类型简化代码:

interface IIndividualConfig {
  master: 0 | 1;
}

// 完整写法:手写映射类型 + 交叉类型
type IConfig = {
  default: IIndividualConfig;
} & {
  [key in CID]?: IIndividualConfig;
}

// 简化写法:借助Record工具类型,效果完全一致
type IConfig = { default: IIndividualConfig } & Partial<Record<CID, IIndividualConfig>>
验证效果
// 合法配置可正常通过校验
const configOne: IConfig = {
  default: { master: 0 },
  sg: {master: 1}
}

const configTwo: IConfig = {
  default: { master: 1 }
}

// 非法国家前缀会触发类型报错,符合预期
const invalidConfig: IConfig = {
  default: { master: 1 },
  jp: { master: 0 } // 报错:对象字面量只能指定已知属性,"jp" 不在类型 "IConfig" 中
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:18:01