no-unsafe-member-access
型が
any
の値へのメンバーアクセスを許可しません。
✅
拡張 "plugin:@typescript-eslint/recommended-type-checked"
を ESLintの設定 で有効にすると、このルールが有効になります。
💭
このルールは 型情報 が必要です。
TypeScriptにおけるany
型は、型システムからの危険な「エスケープハッチ」です。any
を使用すると、多くの型チェックルールが無効になり、一般的には最後の手段として、またはコードをプロトタイピングするときにのみ使用するのが最適です。
最善の意図にもかかわらず、any
型がコードベースに漏れ出すことがあります。any
型付けされた値のメンバーにアクセスすると、コードベースに潜在的な型安全性の穴とバグの元が作成されます。
このルールは、any
と型付けされた変数へのメンバーアクセスを許可しません。
.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/no-unsafe-member-access": "error"
}
};
プレイグラウンドでこのルールを試す ↗
例
- ❌ 不正
- ✅ 正しい
declare const anyVar: any;
declare const nestedAny: { prop: any };
anyVar.a;
anyVar.a.b;
anyVar['a'];
anyVar['a']['b'];
nestedAny.prop.a;
nestedAny.prop['a'];
const key = 'a';
nestedAny.prop[key];
// Using an any to access a member is unsafe
const arr = [1, 2, 3];
arr[anyVar];
nestedAny[anyVar];
プレイグラウンドで開くdeclare const properlyTyped: { prop: { a: string } };
properlyTyped.prop.a;
properlyTyped.prop['a'];
const key = 'a';
properlyTyped.prop[key];
const arr = [1, 2, 3];
arr[1];
let idx = 1;
arr[idx];
arr[idx++];
プレイグラウンドで開くオプション
このルールは設定できません。
使用しない場合
コードベースに既存のany
や安全でないコードの領域が多くある場合、このルールを有効にするのが難しい場合があります。プロジェクトの安全でない領域での型安全性を高めるまでは、no-unsafe-*
ルールをスキップする方が簡単な場合があります。ESLintのdisableコメントを、このルールを完全に無効にする代わりに、特定の状況に使用することを検討してください。
関連
型チェックされたリントルールは、従来のリントルールよりも強力ですが、型チェックされたリンティングを設定する必要があります。型チェックされたルールを有効にした後でパフォーマンスの低下が発生する場合は、パフォーマンスのトラブルシューティングを参照してください。