typeRoots în TypeScript

Alege directoarele din care tsc încarcă automat pachetele de tipuri globale (implicit node_modules/@types).

Sintaxă
"compilerOptions": {
  "typeRoots": ["./tipuri", "./node_modules/@types"]
}

Ce face typeRoots

Implicit, tsc încarcă automat toate pachetele din node_modules/@types (din directorul proiectului și din toate directoarele părinte). Așa ajung în program tipuri globale ca process din @types/node, fără niciun import.

typeRoots înlocuiește această listă de directoare. Fiecare subdirector al unui director din typeRoots este tratat ca un pachet de tipuri (de exemplu tipuri/magazin/index.d.ts). Dacă o setezi și vrei în continuare @types, adaugă explicit "./node_modules/@types" în listă.

Pentru a alege ce pachete se încarcă (nu de unde), folosește types. Nu are valoare implicită scrisă; comportamentul implicit este cel descris mai sus.

Parametri

Parametru Descriere
["dir", ...] Directoarele cu pachete de tipuri, relative la tsconfig.json.

Exemple

Exemplul 1: Tipuri globale proprii

include conține doar src, deci tipuri/ intră în program doar prin typeRoots. --listFilesOnly arată că fișierul a fost încărcat (au fost scoase fișierele bibliotecii standard). Cu un alt director în typeRoots, MAGAZIN nu mai este găsit.

// tsconfig.json
{
  "compilerOptions": {
    "typeRoots": ["./tipuri"],
    "noEmit": true
  },
  "include": ["src"]
}

// tipuri/magazin/index.d.ts
declare const MAGAZIN: { nume: string; oras: string };

// src/index.ts
console.log(MAGAZIN.nume, MAGAZIN.oras);

Rezultat (tsc 5.9)

$ npx tsc --listFilesOnly
/proiect/src/index.ts
/proiect/tipuri/magazin/index.d.ts

$ npx tsc --typeRoots ./altceva
src/index.ts(1,13): error TS2304: Cannot find name 'MAGAZIN'.
src/index.ts(1,27): error TS2304: Cannot find name 'MAGAZIN'.

Greșeli frecvente

  • Să setezi typeRoots doar cu directorul tău și să pierzi @types/node. Lista o înlocuiește pe cea implicită.
  • Să pui în typeRoots fișiere .d.ts direct, nu în subdirectoare. Fiecare pachet trebuie să fie un subdirector (cu index.d.ts sau package.json).

Comenzi înrudite

  • types: Alege exact ce pachete de tipuri globale (din node_modules/@types) se încarcă automat; [] nu încarcă niciunul.
  • skipLibCheck: Nu mai verifică erorile din fișierele .d.ts (ale pachetelor și ale proiectului); compilarea devine mai rapidă.
  • lib: Alege ce declarații de tipuri pentru mediul de rulare sunt incluse: versiunea JavaScript (es2022) și API-urile (dom, webworker).