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

TypeScript如何为多类型值动态键对象定义类型解决索引签名重复报错

解决方案

错误原因

TypeScript 不允许在同一个类型声明中定义多个参数类型完全相同的索引签名,你原有写法中重复声明了三次string类型的索引签名,因此触发重复声明错误。同时你原有代码中额外声明的number类型值和你实际业务允许的三类值不符,属于多余声明。

正确类型定义

直接将索引签名的取值声明为三类允许类型的联合即可:

// 需提前定义好 MachineMapping 类型
export type Data = {
  [key: string]: string | boolean | Array<MachineMapping>;
};

简化写法(TS 4.4及以上版本支持)

你也可以使用TS内置的Record工具类简化代码,效果和上述写法完全等价:

export type Data = Record<string, string | boolean | MachineMapping[]>;

小提示:从该类型对象中读取值时,TypeScript会默认将值识别为三类类型的联合,你可以通过typeof、Array.isArray()等类型判断方法收窄类型,即可获得对应类型的语法提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:24:04