ウェブサイト検索

javascript - Typescript。foreachループで次のエラーを回避するにはどうすればよいですか:「算術演算の左辺は 'any'、'number'、または列挙型のいずれかの型でなければなりません」?


これは JavaScript または TypeScript の foreach の非常に一般的な使い方です:

myArray = ["a","b","c"]

for(var index in myArray)
    console.log(myArray[index]) 

コードは a、b、c をログに記録します

しかし、TypeScriptでは「index」変数は文字列と見なされます。例えば index*2 のような計算を行うと、TSコンパイラーは次のコンパイルエラーを表示します:

for(var index in myArray)
    console.log(index * 2); // TS compiler error.

エラー TS2362 算術演算の左辺は、型 'any', 'number' または列挙型でなければなりません

しかし、実行するとログは0、2、4になります(予想通り)。

このエラーを回避または抑制するにはどうすればよいですか?

回答 #1

index は文字列です。for..in はオブジェクトのキーを反復処理します。配列のキーは数値であるという偶然があります。それでも、キーは文字列として格納されています。

これを見てください:

var myArray = [1, 2, 3];
for (var index in myArray) {
  console.log(typeof index);
}

また、これらのキーを受け取る順序について保証はないことに注意する価値があります。通常は正しい順序で表示されますが、例えば"3", "1", "2"のように受け取っても無効ではありません。

代わりに、普通のforループを使いなさい。そうすれば、インデックスは数字になり、配列を順番に移動していることが確実にわかります。

var myArray = [1, 2, 3];
for (var i = 0; i < myArray.length; i++) {
  console.log(typeof i, myArray[i]);
}

また、forEachを使ってそれを実行することもできます。

var myArray = [1, 2, 3];
myArray.forEach(function(val, index) {
  console.log(typeof index, val);
});

関連記事