no-unsafe-enum-comparison
禁止將列舉值與非列舉值進行比較。
才能運行。
enum Vegetable {
Asparagus = 'asparagus',
}
declare const vegetable: Vegetable;
vegetable === 'asparagus'; // No error
TypeScript 編譯器在處理列舉時可能會出奇地寬鬆。字串列舉通常被認為比數字列舉更安全,但即使是字串列舉也有一些陷阱。例如,允許將列舉值與字面量進行比較
- 上面的程式碼片段應該寫成
vegetable === Vegetable.Asparagus
。允許在比較中使用字面量從根本上破壞了使用列舉的目的。通過強制與正確類型的列舉進行比較 - 它使程式碼庫對列舉成員值的更改更具彈性。
- 它允許程式碼 IDE 使用「重新命名符號」功能快速重新命名列舉。
它使程式碼與正確的列舉語義保持一致,即通過名稱引用它們並將其值視為實作細節。
module.exports = {
"rules": {
"@typescript-eslint/no-unsafe-enum-comparison": "error"
}
};
.eslintrc.cjs
在 Playground 中試試這個規則 ↗
- 範例
- ❌ 不正確
在 Playground 中開啟
選項
此規則不可配置。
何時不使用
如果您不介意將數字和/或字面量字串常數與列舉進行比較,則可能不需要此規則。
另外,在極少數情況下,依賴僅作為
type
導入的第三方列舉時,可能難以遵守此規則。您可以考慮針對這些特定情況使用 ESLint 禁用註解,而不是完全禁用此規則。