no-unsafe-member-access
不允許對型別為 ``any`` 的值進行成員存取。
💭
這條規則需要 類型資訊 才能執行。
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 禁用註解,而不要完全禁用此規則。
相關
經過類型驗證的 linting 規則功能強大,但需要設定 類型驗證 linting。啟用經過類型驗證的規則之後,如果效能有降低的情形,請參閱 效能疑難排解。