TypeScript 对象key为number时的坑
在TypeScript中,当你需要定义一个对象,其键是数字类型时,你可能会遇到一些问题。由于JavaScript对象的键实际上是字符串,当你使用数字作为键时,它们会被转换成字符串。
例如:
let obj = {
1: 'one',
2: 'two'
};
console.log(obj['1']); // 正确
console.log(obj[1]); // 错误,实际上会被当作obj['1']
在上面的代码中,即使你使用数字作为键,TypeScript 编译器也会把它们转换成字符串。因此,当你尝试使用数字索引来访问对象属性时,你会遇到问题。
为了解决这个问题,你可以使用以下两种方法:
- 使用字符串字面量作为键。
- 使用类型断言来明确指定对象的形状。
例如:
// 使用字符串字面量
let obj: { [key: string]: string } = {
'1': 'one',
'2': 'two'
};
console.log(obj['1']); // 正确
console.log(obj[1]); // 正确
// 使用类型断言
let objWithType: { [key: number]: string } = {
1: 'one',
2: 'two'
} as { [key: number]: string };
console.log(objWithType[1]); // 正确
console.log(objWithType['1']); // 错误
在第一种方法中,我们使用了{ [key: string]: string }
来定义对象的形状,这样编译器就会知道所有的键都是字符串。在第二种方法中,我们使用了类型断言来明确指定对象的键应该是数字。
请注意,在实际编程中,应该尽量避免使用数字作为对象的键,因为这可能会导致可读性和维护性的问题。如果需要使用数字索引来访问数组元素,应该使用数组。
评论已关闭