跳至主旨

no-mixed-enums

禁止列舉同時有數字和字串成員。

💭

此規則需要 型別資訊 才能執行。

TypeScript 列舉允許為其成員指定數字或字串值。大多數列舉包含所有數字或所有字串,但理論上你可以在同一個列舉中混合配搭。混合列舉成員型別通常會被視為令人困惑且不好的做法。

.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/no-mixed-enums": "error"
}
};

在遊樂場中嘗試此規則 ↗

範例

enum Status {
Unknown,
Closed = 1,
Open = 'open',
}
在遊樂場中開啟

混合列舉成員值的迭代陷阱

可利用 Object.entries/Object.keys/Object.values 迭代列舉值。

如果所有列舉變數均為字串,則項目數目會與列舉變數數目相符

enum Status {
Closed = 'closed',
Open = 'open',
}

// ['closed', 'open']
Object.values(Status);

但如果列舉值包含經數字初始化的變數 — 含隱式初始化的數字 — 則會在迭代該列舉值時納入那些數字

enum Status {
Unknown,
Closed = 1,
Open = 'open',
}

// ["Unknown", "Closed", 0, 1, "open"]
Object.values(Status);

選項

此規則不可設定。

不使用的情況

如果您不介意混和列舉變數值而且不會迭代列舉值,您可以安全地停用此規則。


經過類型檢查的檢查規則比傳統檢查規則功能更強大,但也需要設定已檢查類型的檢查。如果您在啟用類型檢查規則後效能下降,請參閱效能疑難排解

資源