noEmitOnError în TypeScript

Nu scrie niciun fișier dacă există erori de tip; implicit, tsc scrie JavaScript-ul chiar și cu erori.

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

Ce face noEmitOnError

Mulți se miră aflând că, implicit, tsc generează JavaScript chiar dacă găsește erori de tip. Erorile sunt raportate, iar codul de ieșire al lui tsc este diferit de 0, dar fișierele .js sunt scrise. Asta permite rularea codului în timp ce repari tipurile.

Cu noEmitOnError, orice eroare oprește scrierea tuturor fișierelor. Codul cu greșeli nu ajunge niciodată în dist. Implicit: false.

Parametri

Parametru Descriere
true La orice eroare nu se scrie nimic.
false Valoarea implicită: fișierele se scriu și cu erori.

Exemple

Exemplul 1: Cu și fără noEmitOnError

Cu opțiunea pornită, directorul dist nici nu este creat. Cu --noEmitOnError false, aceeași eroare este raportată, dar dist/index.js este scris.

// tsconfig.json
{
  "compilerOptions": {
    "module": "nodenext",
    "target": "es2022",
    "noEmitOnError": true,
    "outDir": "dist"
  }
}

// index.ts
const total: number = "120 lei";
console.log(total);

Rezultat (tsc 5.9)

$ npx tsc; ls dist
index.ts(1,7): error TS2322: Type 'string' is not assignable to type 'number'.
ls: dist: No such file or directory

$ npx tsc --noEmitOnError false; cat dist/index.js
index.ts(1,7): error TS2322: Type 'string' is not assignable to type 'number'.
const total = "120 lei";
console.log(total);
export {};

Greșeli frecvente

  • Să te bazezi pe faptul că un build cu erori „nu produce nimic”, fără această opțiune. Verifică și codul de ieșire al lui tsc în scripturi.

Comenzi înrudite

  • noEmit: tsc doar verifică tipurile și nu scrie niciun fișier (.js, .d.ts, .map).
  • incremental: Salvează informații despre ultima compilare într-un fișier .tsbuildinfo, ca următoarea compilare să refacă doar ce s-a schimbat.
  • --watch: Pornește tsc în modul „watch”: recompilează automat la fiecare salvare a unui fișier.