noFallthroughCasesInSwitch în TypeScript

Dă eroare când un case care conține cod trece mai departe în următorul case fără break sau return.

Sintaxă
"compilerOptions": { "noFallthroughCasesInSwitch": true }

tsc --noFallthroughCasesInSwitch

Ce face noFallthroughCasesInSwitch

Într-un switch, dacă un case nu se termină cu break, return sau throw, execuția continuă în case-ul următor („fallthrough”). De cele mai multe ori este un break uitat. Cu noFallthroughCasesInSwitch, TypeScript dă eroarea TS7029.

case-urile goale, puse unul sub altul ca să împartă același cod (case "Brașov": case "Sibiu":), sunt permise.

Implicit este false și nu face parte din strict.

Parametri

Parametru Descriere
true Un case cu cod care trece în următorul dă eroare.
false Valoarea implicită.

Exemple

Exemplul 1: break uitat

Pentru Iași, costul ar deveni 15 + 20 = 35, pentru că execuția continuă în case "Cluj". Brașov și Sibiu împart corect același cod.

// tsconfig.json
{
  "compilerOptions": {
    "noFallthroughCasesInSwitch": true
  }
}

// index.ts
function transport(oras: string) {
  let cost = 0;
  switch (oras) {
    case "Iași":
      cost = 15;
    case "Cluj":
      cost += 20;
      break;
    case "Brașov":
    case "Sibiu":
      cost = 25;
      break;
  }
  return cost;
}
console.log(transport("Iași"));

Rezultat (tsc 5.9)

$ npx tsc --noEmit
index.ts(4,5): error TS7029: Fallthrough case in switch.

Exemplul 2: switch corectat

Fiecare case cu cod se termină cu return.

function transport(oras: string): number {
  switch (oras) {
    case "Iași":
      return 15;
    case "Cluj":
      return 20;
    case "Brașov":
    case "Sibiu":
      return 25;
    default:
      return 30;
  }
}

for (const oras of ["Iași", "Sibiu", "Constanța"]) {
  console.log(`${oras}: ${transport(oras)} lei`);
}

Rezultat

Iași: 15 lei
Sibiu: 25 lei
Constanța: 30 lei

Greșeli frecvente

  • Să crezi că opțiunea interzice case-urile grupate. Doar case-urile care au cod și nu se termină sunt raportate.

Comenzi înrudite

  • noImplicitReturns: Dă eroare când o funcție care întoarce o valoare pe unele ramuri se poate termina fără return pe altele.
  • allowUnreachableCode: Controlează ce face tsc cu codul imposibil de atins și cu etichetele nefolosite: eroare, avertisment în editor sau nimic.