TypeScript中如何声明键为string值为number的字典列表类型?
TypeScript 正确声明键为string、值为number的字典数组
你原代码const dict: string[] = [];声明的是字符串类型数组,不符合字典列表的要求,可通过以下两种方式修改:
- 方式1:使用内置
Record工具类型(推荐,写法更简洁)const dict: Record<string, number>[] = [];Record<string, number>是TypeScript内置的泛型工具类型,专门用来描述「键为string类型、值为number类型」的字典结构,末尾加[]代表这是由该类字典组成的数组。 - 方式2:手动定义对象索引签名(和上面写法效果完全等价)
该写法直接通过索引签名const dict: { [key: string]: number }[] = [];[key: string]: number明确约束:对象中所有字符串类型的键,对应的值必须是number类型,末尾加[]同样代表对应数组类型。
类型声明生效后,TypeScript会自动做类型校验:
合法操作(不会报错):
dict.push({ count: 10, total: 200, price: 39.9 });非法操作(TS会直接抛出类型错误):
dict.push({ username: "zhangsan" }); // 值为字符串,不符合number约束 dict.push(123); // 数组元素不是字典对象,类型不匹配
内容的提问来源于stack exchange,提问作者user19251203
相关产品推荐
相关产品推荐

