跳至主要内容

禁止使用不安全的赋值

禁止将类型为 any 的值分配给变量和属性。

💭

此规则需要 类型信息 才能运行。

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>>>();
在游乐场中打开

在某些情况下,该规则允许将 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。如果您在启用类型检查规则后遇到性能下降,请参阅 性能故障排除

资源