no-unsafe-call
禁止呼叫型別為
any
的值。
💭
此規則需要 型別資訊 才能執行。
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 disable 註解,而不是完全停用此規則。
相關
類型檢查的程式碼檢查規則比傳統的程式碼檢查規則更強大,但需要設定 類型檢查程式碼檢查。如果你在啟用了類型檢查規則後遇到效能下降,請參閱 效能疑難排解。