メインコンテンツに移動

安全でない代入の禁止

型 `any` の値を変数やプロパティに代入することを禁止します。

拡張 "plugin:@typescript-eslint/"推奨 - 型チェック済み" `ESLint` 設定で このルールを有効にします。

💭

このルールは 型情報 を実行するために必要です。

TypeScript の `any` 型は、型システムからの危険な「エスケープハッチ」です。`any` を使用すると、多くの型チェックルールが無効になり、一般的には最後の手段として、またはコードのプロトタイピング時にのみ使用するのが最善です。

最善を尽くしたとしても、`any` 型がコードベースに紛れ込むことがあります。`any` 型の値を変数に代入すると、特に外部ライブラリから紛れ込んだ場合は、見つけるのが難しい場合があります。

このルールは、`any` を変数に代入すること、および `any[]` を配列分割代入に代入することを禁止します。

また、このルールはジェネリック型引数の型を比較して、安全でない `any` を特定の型を期待するレシーバーにジェネリック位置で渡さないようにします。たとえば、`Set<any>` を `Set<string>` として宣言された変数に代入するとエラーになります。

.eslintrc.cjs
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>>>();
プレイグラウンドで開く

ルールが `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を設定する必要があります。型チェックルールを有効にした後にパフォーマンスの低下が発生した場合は、パフォーマンストラブルシューティングを参照してください。

リソース