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": truecrezând că pornești verificarea.trueo oprește complet; pentru erori scriifalse.
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.