În dezvoltarea modernă cu bundlere rapide precum Vite, esbuild, SWC sau Babel, compilatoarele transpilează fiecare fișier în mod complet izolat (fără a analiza întregul arbore de tipuri al proiectului). Dacă importați o clasă sau o interfață folosită exclusiv ca tip, transpilatorul poate lăsa accidental o instrucțiune import în codul JavaScript final, provocând erori la runtime dacă fișierul respectiv nu conține exporturi reale de valori (side-effects eronate).
// 1. Import de tip complet la nivel de declarație (TypeScript 3.8+):
import type { OptiuniServer } from './config';
// 2. Importuri inline amestecate într-o singură linie (TypeScript 4.5+):
// Importăm funcția reală 'lanseazaServer' ca valoare, dar 'Configuratie' doar ca tip!
import { lanseazaServer, type Configuratie, type PortRetea } from './server';
export function pornesteApp(cfg: Configuratie) {
lanseazaServer(cfg);
}
// În codul JavaScript compilat:
// import { lanseazaServer } from './server';
// -> 'Configuratie' și 'PortRetea' au fost complet șterse, fără reziduuri!
Standardul TypeScript 5.0: verbatimModuleSyntax
În TypeScript 5.0, opțiunea verbatimModuleSyntax a simplificat radical configurarea modulelor, înlocuind și unificând vechile flag-uri confuze: importsNotUsedAsValues, preserveValueImports și isolatedModules.
Regula impusă de verbatimModuleSyntax: true este simplă și predictibilă:
- Orice import care nu folosește prefixul
typeeste păstrat exact așa cum este scris în codul JavaScript generat. - Orice import marcat cu
import typesautype Numeeste garantat eliminat 100% din fișierul compilat. - Importurile pentru side-effects exclusiviste trebuie scrise explicit:
import "./polyfills";.
{
"compilerOptions": {
"target": "ES2022",
"module": "NodeNext",
"moduleResolution": "NodeNext",
// Standardul recomandat pentru toate proiectele moderne TypeScript 5+:
"verbatimModuleSyntax": true
}
}
Exporturi Inline de Tipuri (Export Type)
Aceeași regulă se aplică și la re-exportarea din fișiere index (barrel files):
export { serviciiCore, type InterfataServiciu } from './servicii';
Această tehnică permite bundler-ului să elimine complet fișierele care conțin doar tipuri prin mecanismul de Dead Code Elimination / Tree Shaking.