禁止使用不安全的赋值
禁止将类型为
any
的值分配给变量和属性。
✅
在 "plugin:@typescript-eslint/recommended-type-checked"
中扩展 ESLint 配置 将启用此规则。
💭
此规则需要 类型信息 才能运行。
TypeScript 中的 any
类型是一种危险的“逃生舱口”,它可以绕过类型系统。使用 any
会禁用许多类型检查规则,通常最好只在万不得已的情况下或在对代码进行原型设计时使用它。
尽管您有最好的意图,但 any
类型有时会泄漏到您的代码库中。将 any
类型的值分配给变量可能很难发现,特别是如果它从外部库中泄漏出来。
此规则禁止将 any
分配给变量,以及将 any[]
分配给数组解构。
此规则还比较泛型类型参数类型,以确保您不会在泛型位置将不安全的 any
传递给期望特定类型的接收者。例如,如果您将 Set<any>
分配给声明为 Set<string>
的变量,它将报错。
.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/no-unsafe-assignment": "error"
}
};
在游乐场中尝试此规则 ↗
示例
- ❌ 不正确
- ✅ 正确
const x = 1 as any,
y = 1 as any;
const [x] = 1 as any;
const [x] = [] as any[];
const [x] = [1 as any];
[x] = [1] as [any];
function foo(a = 1 as any) {}
class Foo {
constructor(private a = 1 as any) {}
}
class Foo {
private a = 1 as any;
}
// generic position examples
const x: Set<string> = new Set<any>();
const x: Map<string, string> = new Map<string, any>();
const x: Set<string[]> = new Set<any[]>();
const x: Set<Set<Set<string>>> = new Set<Set<Set<any>>>();
在游乐场中打开const x = 1,
y = 1;
const [x] = [1];
[x] = [1] as [number];
function foo(a = 1) {}
class Foo {
constructor(private a = 1) {}
}
class Foo {
private a = 1;
}
// generic position examples
const x: Set<string> = new Set<string>();
const x: Map<string, string> = new Map<string, string>();
const x: Set<string[]> = new Set<string[]>();
const x: Set<Set<Set<string>>> = new Set<Set<Set<string>>>();
在游乐场中打开在某些情况下,该规则允许将 any
分配给 unknown
。
允许将 any
分配给 unknown
的示例
const x: unknown = y as any;
const x: unknown[] = y as any[];
const x: Set<unknown> = y as Set<any>;
在游乐场中打开选项
此规则不可配置。
何时不使用它
如果您的代码库中有许多现有的 any
或不安全代码区域,则可能难以启用此规则。在项目中不安全区域增加类型安全之前,跳过 no-unsafe-*
规则可能更容易。您可能考虑使用 ESLint 禁用注释 来解决这些特定情况,而不是完全禁用此规则。
相关
类型检查的 lint 规则比传统的 lint 规则更强大,但也需要配置 类型检查的 lint。如果您在启用类型检查规则后遇到性能下降,请参阅 性能故障排除。