安全でない代入の禁止
型 `any` の値を変数やプロパティに代入することを禁止します。
拡張 "plugin:@typescript-eslint/"推奨 - 型チェック済み"
`ESLint` 設定で このルールを有効にします。
このルールは 型情報 を実行するために必要です。
TypeScript の `any` 型は、型システムからの危険な「エスケープハッチ」です。`any` を使用すると、多くの型チェックルールが無効になり、一般的には最後の手段として、またはコードのプロトタイピング時にのみ使用するのが最善です。
最善を尽くしたとしても、`any` 型がコードベースに紛れ込むことがあります。`any` 型の値を変数に代入すると、特に外部ライブラリから紛れ込んだ場合は、見つけるのが難しい場合があります。
このルールは、`any` を変数に代入すること、および `any[]` を配列分割代入に代入することを禁止します。
また、このルールはジェネリック型引数の型を比較して、安全でない `any` を特定の型を期待するレシーバーにジェネリック位置で渡さないようにします。たとえば、`Set<any>` を `Set<string>` として宣言された変数に代入するとエラーになります。
module.exports = {
"rules": {
"@typescript-eslint/no-unsafe-assignment": "error"
}
};
プレイグラウンドでこのルールを試す ↗
例
- ❌ 間違った例
- ✅ 正しい例
const x = 1 as any,
y = 1 as any;
const [x] = 1 as any;
const [x] = [] as any[];
const [x] = [1 as any];
[x] = [1] as [any];
function foo(a = 1 as any) {}
class Foo {
constructor(private a = 1 as any) {}
}
class Foo {
private a = 1 as any;
}
// generic position examples
const x: Set<string> = new Set<any>();
const x: Map<string, string> = new Map<string, any>();
const x: Set<string[]> = new Set<any[]>();
const x: Set<Set<Set<string>>> = new Set<Set<Set<any>>>();
プレイグラウンドで開くconst x = 1,
y = 1;
const [x] = [1];
[x] = [1] as [number];
function foo(a = 1) {}
class Foo {
constructor(private a = 1) {}
}
class Foo {
private a = 1;
}
// generic position examples
const x: Set<string> = new Set<string>();
const x: Map<string, string> = new Map<string, string>();
const x: Set<string[]> = new Set<string[]>();
const x: Set<Set<Set<string>>> = new Set<Set<Set<string>>>();
プレイグラウンドで開くルールが `any` から `unknown` への代入を許可する場合があります。
許可される `any` から `unknown` への代入の例
const x: unknown = y as any;
const x: unknown[] = y as any[];
const x: Set<unknown> = y as Set<any>;
プレイグラウンドで開くオプション
このルールは設定できません。
使用しない場合
コードベースに既存の `any` や安全でないコード領域が多数ある場合、このルールを有効にするのが難しい場合があります。プロジェクトの安全でない領域での型安全性を高めるまでは、`no-unsafe-*` ルールをスキップする方が簡単な場合があります。このルールを完全に無効にする代わりに、ESLint 無効化コメントを使用することを検討してください。
関連情報
型チェックされた lint ルールは、従来の lint ルールよりも強力ですが、型チェックされた lintingを設定する必要があります。型チェックルールを有効にした後にパフォーマンスの低下が発生した場合は、パフォーマンストラブルシューティングを参照してください。