no-unnecessary-boolean-literal-compare
禁止对布尔字面量进行不必要的相等比较。
在 "plugin:@typescript-eslint/strict-type-checked"
中扩展 ESLint 配置文件 可以启用此规则。
此规则报告的一些问题可以通过 --fix
ESLint 命令行选项 自动修复。
此规则需要 类型信息 才能运行。
将布尔值与布尔字面量进行比较是不必要的:这些比较会产生相同的布尔值。直接使用布尔值,或通过一元否定 (!value
) 更简洁明了。
此规则确保您不包含对布尔字面量的无用比较。如果检查布尔字面量与仅具有 boolean
类型的任何变量的比较,则该比较被认为是无用的。如果类型是布尔值的联合 (string | boolean
、SomeObject | boolean
等),则该比较**不**被认为是无用的。
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
值。在使用自动修复时,这会导致意外的代码更改。
类型检查的 lint 规则比传统的 lint 规则更强大,但也需要配置 类型检查的 lint。如果您在启用类型检查的规则后遇到性能下降,请参阅 性能故障排除。