Skip to content
← Back to rules

unicorn/no-useless-spread 正しさ

This rule is turned on by default.
⚠️🛠️ A dangerous auto-fix is available for this rule.

何を実行するか

以下の不要なケースでスプレッド構文を使用することを禁止します:

  • 配列リテラルを配列リテラルの要素としてスプレッド
  • 配列リテラルを呼び出しまたは new 呼び出しの引数としてスプレッド
  • オブジェクトリテラルをオブジェクトリテラルのプロパティとしてスプレッド
  • インラインに作成された配列をクローンするためにスプレッド構文を使用

なぜこれは良くないのか?

次のビルトインはイテラブルを受け取るため、イテラブルを配列に変換する必要はありません:

  • Map コンストラクタ
  • WeakMap コンストラクタ
  • Set コンストラクタ
  • WeakSet コンストラクタ
  • TypedArray コンストラクタ
  • Array.from(…)
  • TypedArray.from(…)
  • Promise.{all,allSettled,any,race}(…)
  • Object.fromEntries(…)

for…of ループは配列だけでなく任意のイテラブルオブジェクトを反復処理できるため、イテラブルを配列に変換する必要はありません。

yield* は他のイテラブルにデリゲートできるため、イテラブルを配列に変換する必要はありません。

このルールにおける不適切なコードの例

javascript
const array = [firstElement, ...[secondElement], thirdElement];

await Promise.all([...iterable]);

for (const foo of [...set]);

function* foo() {
  yield* [...anotherGenerator()];
}

function foo(bar) {
  return [...bar.map((x) => x * 2)];
}

このルールにおける適切なコードの例

javascript
const array = [firstElement, secondElement, thirdElement];

await Promise.all(iterable);

for (const foo of set);

function* foo() {
  yield* anotherGenerator();
}

function foo(bar) {
  return bar.map((x) => x * 2);
}

使用方法

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

json
{
  "rules": {
    "unicorn/no-useless-spread": "error"
  }
}
bash
oxlint --deny unicorn/no-useless-spread

参照