typescript - eslint: არასპონტანური გარდაქმნა if პირობითებში


მე ვიყენებ eslint-ს @typescript-eslint/eslint-plugin-თან ერთად TypeScript-ში.

დაპრობლემაა გაფრთხილება შემდეგი კოდის any ტიპის გამოყენებაზე if სარტყელში? ვცადე no-implicit-coercion წესით, მაგრამ არ იმუშავა.

const foo = (a: any) => {
  if (a) { // this should be warned
    return 42;
  } else {
    return false;
  }
}

პასუხი #1

თქვენ ეძებთ @typescript-eslint/strict-boolean-expressions.

დაპრიბილებულად, ეს კრძალავს any-ს პირობების შემთხვევაში, მაგრამ ასევე კრძალავს ნულებად შესაძლებელ ბუშლოვან ტიპებს, ნულებად შესაძლებელ სტრიქონებს და ნულებად შესაძლებელ რიცხვებს. მხოლოდ any-ს დასაკრძალად, შეგიძლიათ გამოიყენოთ ეს კონფიგურაცია:

"rules": {
  "@typescript-eslint/strict-boolean-expressions": [2,  {
    "allowNullableBoolean": true,
    "allowNullableString": true,
    "allowNullableNumber": true
  }]
}

პირადად, მე ესოდენ არ გირჩევთ და წესს შევინარჩუნებდი ნაგულისხმევი პარამეტრებით, რადგან ეს შეიძლება თავიდან აგვაცილოს მსგავსი შეცდომებისგან (თუმცა გამოგონილ მაგალითში):

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
}

ასევე, შეგიძლიათ გამოიყენოთ @typescript-eslint/no-explicit-any რათა თავიდან აიცილოთ any თქვენს კოდში მთლიანად; მისი ნაცვლად გამოიყენეთ unknown.