Skip to content
← Back to rules

typescript/no-for-in-array 正しさ

This rule is turned on by default when type-aware linting is enabled.
💭 This rule requires type information.

何を行うか

このルールでは、for-in ループを使用して配列を反復処理することを禁止します。

なぜ問題なのか

for-in ループはオブジェクトの列挙可能なプロパティを反復処理します。これは配列のインデックスを含みますが、配列のプロトタイプやインスタンスに追加された列挙可能なプロパティも含まれます。配列を反復処理する際には、このような動作はほとんど望ましくありません。

このルールに対して 誤り なコードの例:

ts
const arr = [1, 2, 3];

for (const i in arr) {
  console.log(arr[i]);
}

for (const i in arr) {
  console.log(i, arr[i]);
}

このルールに対して 正しい コードの例:

ts
const arr = [1, 2, 3];

// 配列の値を反復処理するには `for-of` を使用
for (const value of arr) {
  console.log(value);
}

// インデックスを用いた通常の `for` ループ
for (let i = 0; i < arr.length; i++) {
  console.log(i, arr[i]);
}

// `forEach` を使用
arr.forEach((value, index) => {
  console.log(index, value);
});

// `for-in` はオブジェクトに対しては問題ありません
const obj = { a: 1, b: 2 };
for (const key in obj) {
  console.log(key, obj[key]);
}

使用方法

設定ファイルまたは CLI でこのルールを 有効化 するには、次のようにします。

json
{
  "rules": {
    "typescript/no-for-in-array": "error"
  }
}
bash
oxlint --type-aware --deny typescript/no-for-in-array

参照