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.