禁止使用不安全的调用
禁止调用类型为
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 规则更强大,但也需要配置 类型检查的 lint。如果您在启用类型检查的规则后遇到性能下降,请参阅 性能故障排除。