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

TypeScript通过字符串索引访问enum枚举值报隐式any类型错误

报错根因

该类型错误由两个问题共同导致:

  • TypeScript 对数字枚举的索引访问有强类型约束:默认仅允许数字类型索引反向查询枚举键名,当使用普通字符串类型变量val作为索引时,TS 无法静态确认该字符串一定属于Resistors枚举内定义的合法键,因此抛出索引类型不匹配错误。
  • 代码存在错误的类型标注:Resistors[val]的返回值是枚举映射的数字(0-9区间),但代码中将valuesArr标注为string[],即使绕过索引报错也会触发后续类型不匹配问题。
修复步骤
  1. 将作为索引的字符串val断言为Resistors枚举的合法键类型keyof typeof Resistors,明确告知TS该字符串为枚举内已定义的键,消除索引类型校验报错。
  2. 修正valuesArr的类型标注,将其从string[]改为number[],匹配枚举值的实际类型。

修复后可正常运行的完整代码:

enum Resistors {
  Black = 0,
  Brown = 1,
  Red = 2,
  Orange = 3,
  Yellow = 4,
  Green = 5,
  Blue = 6,
  Violet = 7,
  Grey = 8,
  White = 9
} 

export function decodedValue(labels : string[]) {
  let valuesArr: number[] = labels.map((value: string) => {
    const val: string = value.charAt(0).toUpperCase() + value.slice(1);
    return Resistors[val as keyof typeof Resistors];
  });
  return Number(valuesArr.join(''));
}

// 执行输出10,符合电阻色码解码预期
console.log(decodedValue(['brown', 'black']));

可选健壮性优化

如果需要拦截非法输入避免运行时异常,可以在访问枚举前增加校验逻辑:

const enumKey = val as keyof typeof Resistors;
if (!(enumKey in Resistors)) {
  throw new Error(`传入了非法的电阻颜色值: ${value}`);
}
return Resistors[enumKey];

内容的提问来源于stack exchange,提问作者Vivekraj K R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 09:36:17