no-unsafe-call
型 `any` の値を呼び出すことを許可しません。
✅
拡張 "plugin:@typescript-eslint/"recommended-type-checked"
を ESLint 設定 で有効にすると、このルールが有効になります。
💭
このルールを実行するには 型情報 が必要です。
TypeScript の `any` 型は、型システムからの危険な「エスケープハッチ」です。 `any` を使用すると、多くの型チェックルールが無効になるため、一般的には最後の手段として、またはコードのプロトタイピング時にのみ使用するのが最善です。
最善を尽くしても、`any` 型がコードベースに紛れ込むことがあります。 `any` 型の値を関数として呼び出すと、潜在的な型安全性の問題が発生し、コードベースにバグが発生する可能性があります。
このルールは、`any` として型付けされた値の呼び出しを禁止します。
.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/no-unsafe-call": "error"
}
};
プレイグラウンドでこのルールを試す ↗
例
- ❌ 間違い
- ✅ 正解
declare const anyVar: any;
declare const nestedAny: { prop: any };
anyVar();
anyVar.a.b();
nestedAny.prop();
nestedAny.prop['a']();
new anyVar();
new nestedAny.prop();
anyVar`foo`;
nestedAny.prop`foo`;
プレイグラウンドで開くdeclare const typedVar: () => void;
declare const typedNested: { prop: { a: () => void } };
typedVar();
typedNested.prop.a();
(() => {})();
new Map();
String.raw`foo`;
プレイグラウンドで開くオプション
このルールは設定できません。
使用しない場合
コードベースに既存の `any` が多数ある場合、または安全でないコードの領域がある場合、このルールを有効にするのは難しい場合があります。 プロジェクトの安全でない領域の型安全性を高めるまでは、`no-unsafe-*` ルールをスキップする方が簡単な場合があります。 このルールを完全に無効にする代わりに、ESLint 無効化コメントを使用することを検討してください。
関連
型チェックされた lint ルールは、従来の lint ルールよりも強力ですが、型チェックされた linting を設定する必要があります。 型チェックされたルールを有効にした後にパフォーマンスが低下した場合は、パフォーマンストラブルシューティングを参照してください。