no-unnecessary-boolean-literal-compare
禁止不必要的與布林直值的相等比較。
🔒
擴充功能 "plugin:@typescript-eslint/strict-type-checked"
in an ESLint 設定 啟用這條規則。
🔧
這條規則報告的某些問題可使用 ESLint 命令列選項 --fix
自動修正.
💭
此規則需要 輸入 才能執行。
將布林值與布林直值比較是不必要的:這些比較會產生相同的布林值。直接使用布林值或使用一元否定運算 (!value
) 會比較簡潔明瞭。
此規則可確保您不會包含不必要的與布林直值的比較。如果比較檢查的內容是僅含有 boolean
型別的變數與布林直值,則此比較會被視為不必要。如果型別是布林值的聯集(string | boolean
、SomeObject | boolean
等),則此比較不會被視為不必要。
.eslintrc.cjs
module.exports = {
"rules": {
"@typescript-eslint/no-unnecessary-boolean-literal-compare": "error"
}
};
在遊樂場嘗試此規則 ↗
範例
註解
在此頁面上,範例中僅使用嚴格相等(===
和 !==
)。然而,規則的實作並不區分嚴格和寬鬆相等。如果下面任一範例使用 ===
而使用 ==
,則處理方式相同,而如果使用 !==
而使用 !=
,則處理方式也會相同。
- ❌ 不正確
- ✅ 正確
declare const someCondition: boolean;
if (someCondition === true) {
}
在遊樂場開啟declare const someCondition: boolean;
if (someCondition) {
}
declare const someObjectBoolean: boolean | Record<string, unknown>;
if (someObjectBoolean === true) {
}
declare const someStringBoolean: boolean | string;
if (someStringBoolean === true) {
}
在遊樂場開啟選項
此規則接受以下選項
type Options = [
{
/** Whether to allow comparisons between nullable boolean variables and `false`. */
allowComparingNullableBooleansToFalse?: boolean;
/** Whether to allow comparisons between nullable boolean variables and `true`. */
allowComparingNullableBooleansToTrue?: boolean;
},
];
const defaultOptions: Options = [
{
allowComparingNullableBooleansToTrue: true,
allowComparingNullableBooleansToFalse: true,
},
];
此規則總是會檢查布林變數和布林文字之間的比較。預設情況下不會檢查可為空的布林變數和布林文字之間的比較。
allowComparingNullableBooleansToTrue
使用 { allowComparingNullableBooleansToTrue: false }
的此規則的程式碼範例
- ❌ 不正確
- ✅ 正確
declare const someUndefinedCondition: boolean | undefined;
if (someUndefinedCondition === true) {
}
declare const someNullCondition: boolean | null;
if (someNullCondition !== true) {
}
在遊樂場開啟declare const someUndefinedCondition: boolean | undefined;
if (someUndefinedCondition) {
}
declare const someNullCondition: boolean | null;
if (!someNullCondition) {
}
在遊樂場開啟allowComparingNullableBooleansToFalse
使用 { allowComparingNullableBooleansToFalse: false }
的此規則的程式碼範例
- ❌ 不正確
- ✅ 正確
declare const someUndefinedCondition: boolean | undefined;
if (someUndefinedCondition === false) {
}
declare const someNullCondition: boolean | null;
if (someNullCondition !== false) {
}
在遊樂場開啟declare const someUndefinedCondition: boolean | undefined;
if (!(someUndefinedCondition ?? true)) {
}
declare const someNullCondition: boolean | null;
if (someNullCondition ?? true) {
}
在遊樂場開啟修復程式
比較 | 修復程式輸出 | 註解 |
---|---|---|
booleanVar === true | booleanVar | |
booleanVar !== true | !booleanVar | |
booleanVar === false | !booleanVar | |
booleanVar !== false | booleanVar | |
nullableBooleanVar === true | nullableBooleanVar | 僅當 allowComparingNullableBooleansToTrue 選項是 false 時才檢查/修正 |
nullableBooleanVar !== true | !nullableBooleanVar | 僅當 allowComparingNullableBooleansToTrue 選項是 false 時才檢查/修正 |
nullableBooleanVar === false | !(nullableBooleanVar ?? true) | 僅當 allowComparingNullableBooleansToFalse 選項是 false 時才檢查/修正 |
nullableBooleanVar !== false | nullableBooleanVar ?? true | 僅當 allowComparingNullableBooleansToFalse 選項是 false 時才檢查/修正 |
何時不使用它
當 strictNullChecks
已停用時,請勿使用此規則。ESLint 無法區分 false
和 undefined
或 null
值。在使用自動修復時,這會導致意外的程式碼變更。
類型檢查的程式碼檢查規則比傳統的程式碼檢查規則更強大,但同時需要設定 類型檢查程式碼檢查。如果您在啟用類型檢查的規則後遇到效能下降,請參閱 效能疑難排解。