isolatedDeclarations în TypeScript

Cere tipuri scrise explicit pe exporturi, ca fișierele .d.ts să poată fi generate fișier cu fișier, fără verificarea tipurilor.

Sintaxă
"compilerOptions": {
  "isolatedDeclarations": true,
  "declaration": true
}

Ce face isolatedDeclarations

Pentru a genera un fișier .d.ts, tsc trebuie să știe tipul fiecărui export. Dacă tipul nu este scris (export function cuTva(pret: number) { ... }), tsc îl deduce din corpul funcției, ceea ce cere verificarea tipurilor din tot proiectul. Uneltele rapide (oxc, swc, esbuild cu pluginuri) nu pot face asta.

Cu isolatedDeclarations, tsc cere ca exporturile să aibă tipul scris acolo unde nu este evident din sintaxă: tipul de return al funcțiilor exportate (TS9007), tipul variabilelor exportate calculate (TS9010). Literalele simple (export const oras = "Iași") nu au nevoie de tip.

Are nevoie de declaration sau composite (altfel TS5069). Implicit: false. Este utilă pentru biblioteci și monorepo-uri mari.

Parametri

Parametru Descriere
true Exporturile trebuie să aibă tipuri explicite acolo unde nu se văd din sintaxă.
false Valoarea implicită.

Exemple

Exemplul 1: Exporturi fără tip scris

cuTva nu are tip de return, iar note este calculat cu map. oras (literal) și total (tip scris) sunt în regulă.

// tsconfig.json
{
  "compilerOptions": {
    "isolatedDeclarations": true,
    "declaration": true,
    "module": "nodenext",
    "target": "es2022"
  }
}

// index.ts
export function cuTva(pret: number) {
  return pret * 1.19;
}

export const oras = "Iași";
export const note = [9, 10].map(n => n - 1);

export function total(preturi: number[]): number {
  return preturi.reduce((s, p) => s + p, 0);
}

Rezultat (tsc 5.9)

$ npx tsc --noEmit
index.ts(1,17): error TS9007: Function must have an explicit return type annotation with --isolatedDeclarations.
index.ts(6,14): error TS9010: Variable must have an explicit type annotation with --isolatedDeclarations.

Exemplul 2: Fără declaration

Opțiunea are sens doar când se generează declarații.

// tsconfig.json
{
  "compilerOptions": {
    "isolatedDeclarations": true,
    "noEmit": true
  }
}

Rezultat (tsc 5.9)

$ npx tsc
tsconfig.json(3,5): error TS5069: Option 'isolatedDeclarations' cannot be specified without specifying option 'declaration' or option 'composite'.

Greșeli frecvente

  • Să crezi că opțiunea cere tipuri peste tot. Doar exporturile; codul intern rămâne cu tipuri deduse.

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.
  • isolatedModules: Dă eroare pentru codul care nu poate fi transformat corect fișier cu fișier (de esbuild, Babel, swc sau Node.js).
  • composite: Pregătește un proiect pentru a fi folosit prin „references” de alte proiecte și construit cu tsc -b.
  • emitDeclarationOnly: tsc scrie doar fișierele .d.ts, fără .js; JavaScript-ul este produs de altă unealtă (esbuild, Babel, swc).