禁止不安全的枚举比较
禁止将枚举值与非枚举值进行比较。
✅
在 "plugin:@typescript-eslint/recommended-type-checked"
中扩展 ESLint 配置 将启用此规则。
💡
此规则报告的一些问题可以通过编辑器 建议 手动修复。
💭
此规则需要 类型信息 才能运行。
TypeScript 编译器在处理枚举时可能出乎意料地宽松。字符串枚举被广泛认为比数字枚举更安全,但即使是字符串枚举也有一些缺陷。例如,允许将枚举值与字面量进行比较
enum Vegetable {
Asparagus = 'asparagus',
}
declare const vegetable: Vegetable;
vegetable === 'asparagus'; // No error
上面的代码片段应该改为 vegetable === Vegetable.Asparagus
。允许在比较中使用字面量会破坏使用枚举的初衷。通过强制使用正确类型化的枚举进行比较
- 它使代码库更能抵御枚举成员更改值的风险。
- 它允许代码 IDE 使用“重命名符号”功能快速重命名枚举。
- 它使代码符合枚举语义,即通过名称引用枚举,并将它们的值视为实现细节。
.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/no-unsafe-enum-comparison": "error"
}
};
在游乐场中尝试此规则 ↗
示例
- ❌ 错误
- ✅ 正确
选项
此规则不可配置。
何时不使用它
如果您不介意数字和/或字面量字符串常量与枚举进行比较,那么您可能不需要此规则。
在极少数情况下,如果依赖于仅作为type
导入的第三方枚举,则可能难以遵守此规则。您可以考虑使用ESLint 禁用注释来处理这些特定情况,而不是完全禁用此规则。
类型检查的 lint 规则比传统的 lint 规则更强大,但也需要配置类型检查的 lint。如果您在启用类型检查规则后遇到性能下降,请参阅性能故障排除。