I've recently found multiple bugs related to values being 0
in if/else statements. They were being handled as if they're false
.
For example,
if (viewState.latitude) { // 👈🏼️ I needed to add a !== undefined to handle when latitude is 0
params.set(
QUERY_PARAM_LATITUDE_KEY,
viewState.latitude.toFixed(4).toString(),
);
}
How can I prevent these? I can't find an ESLint rule for this. It would be nice if I could prevent if (number) {
formats. It seems like a really simple question though 🤷🏼️
Enabling this rule does make things more verbose. It has already caught more bugs though. It really is a tradeoff.
if (viewState.latitude) {
params.set(
QUERY_PARAM_LATITUDE_KEY,
viewState.latitude.toFixed(4).toString(),
);
}
will error with
Unexpected nullable number value in conditional. Please handle the nullish/zero/NaN cases explicitly @typescript-eslint/strict-boolean-expressions`.
Note: rightButton
is a boolean | undefined
// previously
if (event.rightButton) {
// now
if (event.rightButton !== undefined && event.rightButton) {
// or alternatively
if (event.rightButton === true) {
module.exports = {
"rules": {
"@typescript-eslint/strict-boolean-expressions": "error"
}
};
rules: {
"@typescript-eslint/strict-boolean-expressions": "error",
}
Or to use the tip from Dan R's answer:
rules: {
"@typescript-eslint/strict-boolean-expressions": ["error", { "allowNumber": false }],
}
This error will now throw for usage of bitmask operators:
bitmask & 1
So I put this at the top of those files:
/* eslint @typescript-eslint/strict-boolean-expressions: ["error", { "allowNumber": true }] */