跳至主要内容

禁止不安全的成员访问

禁止对类型为 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];
在游乐场中打开

选项

此规则不可配置。

何时不使用它

如果您的代码库中有许多现有的 any 或不安全代码区域,则可能难以启用此规则。在提高项目中不安全区域的类型安全性之前,跳过 no-unsafe-* 规则可能更容易。您可以考虑使用 ESLint 禁用注释 来处理这些特定情况,而不是完全禁用此规则。


类型检查的 lint 规则比传统的 lint 规则更强大,但也需要配置 类型检查的 lint。如果您在启用类型检查的规则后遇到性能下降,请参阅 性能故障排除

资源