Ce face emitDeclarationOnly
În multe proiecte, JavaScript-ul este produs de o unealtă rapidă (esbuild, swc, Babel, Vite), care însă nu poate genera fișiere .d.ts. Cu emitDeclarationOnly, tsc face doar această parte: verifică tipurile și scrie .d.ts, fără niciun .js.
Are nevoie de declaration sau composite (altfel TS5069). Permite și allowImportingTsExtensions, pentru că nu se generează JavaScript. Implicit: false.
Parametri
| Parametru | Descriere |
|---|---|
true |
Se scriu doar .d.ts (și .d.ts.map). |
false |
Valoarea implicită. |
Exemple
Exemplul 1: Doar declarații
Aceeași sursă ca la declaration, dar în dist apare doar magazin.d.ts. Fără declaration, tsc refuză opțiunea.
// tsconfig.json
{
"compilerOptions": {
"module": "nodenext",
"target": "es2022",
"declaration": true,
"emitDeclarationOnly": true,
"outDir": "dist"
}
}
Rezultat (tsc 5.9)
$ npx tsc && find dist -type f | sort
dist/magazin.d.ts
$ npx tsc # fără "declaration": true
tsconfig.json(5,5): error TS5069: Option 'emitDeclarationOnly' cannot be specified without specifying option 'declaration' or option 'composite'.
Greșeli frecvente
- Să confunzi opțiunea cu
noEmit.noEmitnu scrie nimic;emitDeclarationOnlyscrie declarațiile.
Comenzi înrudite
declaration: Generează lângă fiecare fișier .js un fișier .d.ts cu tipurile lui, ca alte proiecte să-l poată folosi cu tipuri.noEmit: tsc doar verifică tipurile și nu scrie niciun fișier (.js, .d.ts, .map).isolatedDeclarations: Cere tipuri scrise explicit pe exporturi, ca fișierele .d.ts să poată fi generate fișier cu fișier, fără verificarea tipurilor.declarationDir: Directorul în care se scriu fișierele .d.ts, separat de outDir unde ajunge JavaScript-ul.