我有一个我需要解决的打字稿错误。这在前面的脚本中声明:
protected suggestedServicesDict: { [id: number]: { [id: number]: { weight: number } } } = {}
然后使用for循环尝试遍历集合
for (var categoryId in this.suggestedServicesDict) {
这导致categoryId被推断为字符串而不是数字。后来导致验证错误,因为另一个函数期望一个数字。 稍后它将在suggestCategory中使用:
var suggestedCategory = { CategoryId: categoryId, Name: category.Name, AverageWeight: 0, Services: [] };
这里导致suggestedCategory CategoryId为字符串。
我似乎无法成功地将其声明为数字,而不是允许推断它,我已经尝试了许多没有用的东西。
任何人都可以告诉我如何确保categoryId是一个数字
答案 0 :(得分:1)
虽然可索引类型支持数字作为键,但这仅适用于为键添加/设置值:
let a = 3;
let o = {} as { [num: number]: string };
o[a] = "three";
但是在javascript中,键总是字符串,所以上面的代码实际上会创建以下对象:
{
"3": "three"
}
如果您知道您的密钥是数字的字符串表示,那么您可以使用Number
来获取数字值:
for (let categoryId in this.suggestedServicesDict) {
let idNumber = Number(categoryId);
let value = this.suggestedServicesDict[idNumber]; // or [categoryId]
...
}