2017-03-09 18 views
0

修正する必要があるタイスクリプトエラーがあります。これは、以前のスクリプトで宣言されている:forループ、その後Typescriptでこのタイプの推論を修正するには

protected suggestedServicesDict: { [id: number]: { [id: number]: { weight: number } } } = {} 

コレクションをループすることを試みるために使用されている
for (var categoryId in this.suggestedServicesDict) { 

これは文字列ではない数と推察されている区分になります。他の関数が数値を期待しているため、後で検証エラーが発生します。ここ 後でそれをsuggestedCategoryに使用されます。

var suggestedCategory = { CategoryId: categoryId, Name: category.Name, AverageWeight: 0, Services: [] }; 

ここでは、suggestedCategory区分が文字列であることを引き起こしています。

私はこれを推測するのではなく、数字として正常に宣言できないようですが、私は数多くのことを試しましたが、それはうまくいきませんでした。

いずれかのみキーの値を設定/追加に適用されることを、インデックス可能なタイプは、キーとして数字をサポートしていますが区分は数

答えて

1

であることを確実にする方法を教えてもらえます:

let a = 3; 
let o = {} as { [num: number]: string }; 

o[a] = "three"; 

をしかし、JavaScriptでのキーは常に文字列であるので、上記のコードは、実際には次のオブジェクトが作成されます:あなたはあなたの鍵はnumbeの文字列表現であることを知っている場合

{ 
    "3": "three" 
} 

をrsの場合、Numberを使用して数値を取得することができます。

for (let categoryId in this.suggestedServicesDict) { 
    let idNumber = Number(categoryId); 
    let value = this.suggestedServicesDict[idNumber]; // or [categoryId] 
    ... 
} 
関連する問題