–watch în TypeScript

Pornește tsc în modul „watch”: recompilează automat la fiecare salvare a unui fișier.

Sintaxă
tsc --watch
tsc -w
tsc -w --preserveWatchOutput

"compilerOptions": {
  "preserveWatchOutput": true,
  "assumeChangesOnlyAffectDirectDependencies": true
}

Ce face --watch

tsc --watch (sau -w) compilează proiectul, apoi rămâne pornit și urmărește fișierele. La fiecare modificare recompilează doar ce e nevoie și afișează erorile. Se oprește cu Ctrl+C. Funcționează și cu tsc -b -w pentru proiecte cu referințe.

Implicit, la fiecare recompilare tsc golește ecranul terminalului. preserveWatchOutput (implicit false) păstrează rezultatele anterioare, util când rulezi mai multe procese în același terminal. assumeChangesOnlyAffectDirectDependencies (implicit false) face recompilarea mai rapidă în proiecte mari: după modificarea unui fișier, re-verifică doar fișierele care îl importă direct, nu tot lanțul. Poate rata erori din fișiere mai depărtate, care apar abia la o compilare completă.

Felul în care sunt urmărite fișierele se poate regla în secțiunea watchOptions din tsconfig (watchFile, watchDirectory, excludeDirectories).

Parametri

Parametru Descriere
--watch, -w Modul watch (doar în linia de comandă).
preserveWatchOutput Nu golește ecranul la recompilare. Implicit false.
assumeChangesOnlyAffectDirectDependencies Re-verifică doar dependențele directe ale fișierului modificat. Implicit false.

Exemple

Exemplul 1: O modificare cu eroare

Proiectul pornește fără erori. Apoi index.ts este salvat cu o greșeală, iar tsc recompilează singur. Cu --preserveWatchOutput, primul mesaj rămâne pe ecran.

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

// index.ts, după modificare
const x: number = "a";
export {};

Rezultat (ora diferă la fiecare rulare)

$ npx tsc -w --preserveWatchOutput

7:50:31 PM - Starting compilation in watch mode...


7:50:31 PM - Found 0 errors. Watching for file changes.

7:50:35 PM - File change detected. Starting incremental compilation...

index.ts(1,7): error TS2322: Type 'string' is not assignable to type 'number'.

7:50:35 PM - Found 1 error. Watching for file changes.

Greșeli frecvente

  • Să rulezi tsc -w și un bundler în watch care scriu în același director. Cele două se pot încurca reciproc la fiecare salvare.
  • Să lași assumeChangesOnlyAffectDirectDependencies pornit în CI. Acolo vrei verificarea completă.

Comenzi înrudite

  • incremental: Salvează informații despre ultima compilare într-un fișier .tsbuildinfo, ca următoarea compilare să refacă doar ce s-a schimbat.
  • composite: Pregătește un proiect pentru a fi folosit prin „references” de alte proiecte și construit cu tsc -b.
  • noEmitOnError: Nu scrie niciun fișier dacă există erori de tip; implicit, tsc scrie JavaScript-ul chiar și cu erori.
  • pretty: Afișează erorile cu culori și cu rândul de cod subliniat; implicit pornit când ieșirea este un terminal.