Skip to content
← Back to rules

typescript/no-misused-spread 正しさ

This rule is turned on by default when type-aware linting is enabled.
💭 This rule requires type information.
An auto-fix is available for this rule.

何をするか

このルールは、意味が通らないまたはランタイムエラーを引き起こす可能性がある場所での展開構文(spread syntax)の使用を禁止します。

なぜ問題なのか

展開演算子は、すぐに分かりにくい形で誤用されることがあり、ランタイムエラーまたは予期しない動作を引き起こす可能性があります。このルールは、よくある誤用を検出するのに役立ちます。

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

ts
// 非反復可能値を配列に展開
const num = 42;
const arr = [...num]; // ランタイムエラー:num は反復可能ではありません

// プロミスを配列に展開
const promise = Promise.resolve([1, 2, 3]);
const arr2 = [...promise]; // ランタイムエラー:Promise は反復可能ではありません

// 非オブジェクトをオブジェクトリテラルに展開
const str = "hello";
const obj = { ...str }; // {'0': 'h', '1': 'e', ...} という形で作成され、予期しない結果になる可能性があります

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

ts
// 配列の展開
const arr1 = [1, 2, 3];
const arr2 = [...arr1];

// オブジェクトの展開
const obj1 = { a: 1, b: 2 };
const obj2 = { ...obj1 };

// 解決済みのプロミスの展開
const promise = Promise.resolve([1, 2, 3]);
const arr3 = [...(await promise)];

// 必要に応じて、非反復可能な値に対して Array.from を使用
const str = "hello";
const arr4 = Array.from(str); // ['h', 'e', 'l', 'l', 'o']

設定

このルールは、以下のプロパティを持つ設定オブジェクトを受け取ります:

allow

type: array

default: []

通常は誤用として警告対象となるが、許可される型や値の指定リスト。

allow[n]

type: string

特定の宣言と一致させるための型または値の指定

次の4種類の指定がサポートされています:

  1. 文字列指定子(非推奨):名前による汎用一致
json
"Promise"
  1. ファイル指定子:ローカルファイルで宣言された型/値と一致
json
{ "from": "file", "name": "MyType" }
{ "from": "file", "name": ["Type1", "Type2"] }
{ "from": "file", "name": "MyType", "path": "./types.ts" }
  1. ライブラリ指定子:TypeScript の組み込みライブラリ型と一致
json
{ "from": "lib", "name": "Promise" }
{ "from": "lib", "name": ["Promise", "PromiseLike"] }
  1. パッケージ指定子:npmパッケージから提供される型/値と一致
json
{ "from": "package", "name": "Observable", "package": "rxjs" }
{ "from": "package", "name": ["Observable", "Subject"], "package": "rxjs" }

使用方法

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

json
{
  "rules": {
    "typescript/no-misused-spread": "error"
  }
}
bash
oxlint --type-aware --deny typescript/no-misused-spread

参照