allowUnreachableCode în TypeScript

Controlează ce face tsc cu codul imposibil de atins și cu etichetele nefolosite: eroare, avertisment în editor sau nimic.

Sintaxă
"compilerOptions": {
  "allowUnreachableCode": false,
  "allowUnusedLabels": false
}

Ce face allowUnreachableCode

allowUnreachableCode privește codul care nu poate rula niciodată, de exemplu instrucțiunile de după un return. allowUnusedLabels privește etichetele (eticheta:) care nu sunt folosite de niciun break sau continue. Au trei valori: false (eroare la compilare: TS7027, respectiv TS7028), true (nicio problemă raportată) și nesetat.

Valoarea implicită este nesetată (undefined): tsc nu dă eroare, iar editorul arată codul respectiv estompat, ca sugestie. Cine vrea ca build-ul să se oprească scrie explicit false. Numele este „allow” (permite), deci false înseamnă „nu permite”.

Parametri

Parametru Descriere
false Codul imposibil de atins (sau eticheta nefolosită) dă eroare.
true Nu se raportează nimic.
(lipsă) Valoarea implicită: fără eroare la compilare, doar sugestie în editor.

Exemple

Exemplul 1: Ambele opțiuni pe false

console.log de după return nu rulează niciodată, iar eticheta nu este folosită de niciun break. Fără tsconfig (valori implicite), același fișier trece fără erori.

// tsconfig.json
{
  "compilerOptions": {
    "allowUnreachableCode": false,
    "allowUnusedLabels": false
  }
}

// index.ts
function pret(x: number) {
  return x * 1.19;
  console.log("niciodată");
}
eticheta: for (let i = 0; i < 2; i++) {
  console.log(pret(i));
}

Rezultat (tsc 5.9)

$ npx tsc --noEmit
index.ts(3,3): error TS7027: Unreachable code detected.
index.ts(5,1): error TS7028: Unused label.

Exemplul 2: O etichetă folosită

Eticheta cautare este folosită de break ca să iasă din ambele bucle, deci nu este raportată.

const rafturi = [["mere", "pere"], ["prune", "caise"]];

cautare: for (const raft of rafturi) {
  for (const fruct of raft) {
    if (fruct === "prune") {
      console.log("Am găsit prunele.");
      break cautare;
    }
    console.log("verific", fruct);
  }
}

Rezultat

verific mere
verific pere
Am găsit prunele.

Greșeli frecvente

  • Să scrii "allowUnreachableCode": true crezând că pornești verificarea. true o oprește complet; pentru erori scrii false.

Comenzi înrudite

  • noUnusedLocals: Dă eroare pentru variabilele locale, importurile și funcțiile declarate, dar niciodată citite.
  • noFallthroughCasesInSwitch: Dă eroare când un case care conține cod trece mai departe în următorul case fără break sau return.
  • noImplicitReturns: Dă eroare când o funcție care întoarce o valoare pe unele ramuri se poate termina fără return pe altele.