如何在Typescript中修复此类型推断

时间:2017-03-09 20:12:45

标签: typescript

我有一个我需要解决的打字稿错误。这在前面的脚本中声明:

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是一个数字

1 个答案:

答案 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]
    ...
}