unicorn/no-useless-spread 正しさ
何を実行するか
以下の不要なケースでスプレッド構文を使用することを禁止します:
- 配列リテラルを配列リテラルの要素としてスプレッド
- 配列リテラルを呼び出しまたは
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