typescript - eslint: no-implicit-coercion för if-satser
Jag använder eslint med @typescript-eslint/eslint-plugin i TypeScript.
Är det möjligt att varna följande kod för att använda any-typen i ett if-villkor? Jag försökte no-implicit-coercion-regeln men det fungerade inte.
const foo = (a: any) => {
if (a) { // this should be warned
return 42;
} else {
return false;
}
}
Svar #1
Du letar efter @typescript-eslint/strict-boolean-expressions.
Som standard förbjuder det any i villkorssatser, men förbjuder också nullable booleans, nullable strings och nullable numbers. För att bara förbjuda any kan du använda denna konfiguration:
"rules": {
"@typescript-eslint/strict-boolean-expressions": [2, {
"allowNullableBoolean": true,
"allowNullableString": true,
"allowNullableNumber": true
}]
}
Personligen rekommenderar jag inte detta dock och jag skulle behålla regeln med standardinställningarna, eftersom det kan förhindra buggar som denna (även om det är ett konstlat exempel):
declare const maybeNumber: number | null
if (maybeNumber) {
// number could actually be null, 0, or NaN!
console.log('maybeNumber is not null!') // oops
let thisIsNaN = 123 / maybeNumber
}
Du kan också använda @typescript-eslint/no-explicit-any för att helt undvika any i din kodbas; använd unknown istället.
