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
相关产品推荐
相关产品推荐

