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

如何在Typescript中修复此类型推断,typescript,Typescript,我有一个打字脚本错误需要修复。这在前面的脚本中声明: protected suggestedServicesDict: { [id: number]: { [id: number]: { weight: number } } } = {} 然后使用for循环尝试在集合中循环 for (var categoryId in this.suggestedServicesDict) { 这将导致categoryId被推断为字符串而不是数字。这会导致验证错误,因为另一个函数需要一个数字。 此处稍后将在

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

protected suggestedServicesDict: { [id: number]: { [id: number]: { weight: number } } } = {}
然后使用for循环尝试在集合中循环

for (var categoryId in this.suggestedServicesDict) {
这将导致categoryId被推断为字符串而不是数字。这会导致验证错误,因为另一个函数需要一个数字。 此处稍后将在suggestedCategory中使用:

var suggestedCategory = { CategoryId: categoryId, Name: category.Name, AverageWeight: 0, Services: [] }; 
在这里,它使suggestedCategory类别ID成为字符串

我似乎无法成功地将它声明为一个数字,而不是允许它被推断,我已经尝试了很多事情,但都没有成功


有谁能告诉我如何确保categoryId是一个数字,而可索引类型支持数字作为键,这只适用于为键添加/设置值:

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