typescript/no-misused-spread 正しさ
何をするか
このルールは、意味が通らないまたはランタイムエラーを引き起こす可能性がある場所での展開構文(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種類の指定がサポートされています:
- 文字列指定子(非推奨):名前による汎用一致
json
"Promise"- ファイル指定子:ローカルファイルで宣言された型/値と一致
json
{ "from": "file", "name": "MyType" }
{ "from": "file", "name": ["Type1", "Type2"] }
{ "from": "file", "name": "MyType", "path": "./types.ts" }- ライブラリ指定子:TypeScript の組み込みライブラリ型と一致
json
{ "from": "lib", "name": "Promise" }
{ "from": "lib", "name": ["Promise", "PromiseLike"] }- パッケージ指定子: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