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

如何将TypeScript枚举作为对象属性键并解决类型报错问题

解决TypeScript枚举值作为对象键的索引类型报错问题

问题原因

for...in循环遍历对象时,迭代变量默认被推断为string类型,但你的comparisons对象键是TaskType枚举的字符串值(属于TaskType类型),string类型无法直接用来索引该对象,因此触发类型报错。你之前尝试的taskType as keyof TaskType无效,是因为keyof TaskType对应的是枚举的键名(比如"Classification"),而非枚举的实际值("classification"),两者类型不匹配。

解决方案

方案1:通过Object.keys断言类型后遍历

export enum TaskType {
  Classification = 'classification',
  Extraction = 'extraction'
}
// 用Record简化类型定义,和{ [name in TaskType]: Function }等价
const comparisons: Record<TaskType, Function> = {
  'classification': () => false,
  'extraction': () => false
}

// 将Object.keys结果断言为TaskType数组,再遍历
(Object.keys(comparisons) as TaskType[]).forEach(taskType => {
  const func = comparisons[taskType]; // 类型正确推断为Function
});

方案2:在for...in循环中做正确的类型断言

export enum TaskType {
  Classification = 'classification',
  Extraction = 'extraction'
}
const comparisons: { [name in TaskType]: Function } = {
  'classification': () => false,
  'extraction': () => false
}

for (const taskType in comparisons) {
  // 断言为TaskType类型(枚举值)而非keyof TaskType(枚举键名)
  const func = comparisons[taskType as TaskType]; // 类型正确推断为Function
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 15:30:58