Ce face isolatedModules
Multe unelte transformă TypeScript în JavaScript un fișier o dată, fără să știe ce conțin celelalte fișiere: esbuild, Babel, swc, Vite, Node.js. Unele construcții nu pot fi transformate corect așa. Exemplul tipic: export { Produs } from "./tipuri.js", unde Produs este un tip. Privind doar acest fișier, unealta nu știe dacă trebuie să păstreze exportul (pentru o valoare) sau să-l șteargă (pentru un tip).
Cu isolatedModules, tsc dă eroare pentru aceste cazuri: reexportul unui tip fără export type (TS1205) și folosirea unui const enum declarat în altă parte (TS2748). Codul tău devine sigur pentru orice unealtă.
Implicit: false. Este pornită automat de verbatimModuleSyntax, iar tsc --init din 5.9 o scrie explicit. Dacă proiectul este compilat de altă unealtă decât tsc, pornește-o.
Parametri
| Parametru | Descriere |
|---|---|
true |
Construcțiile care cer informații din alte fișiere dau eroare. |
false |
Valoarea implicită. |
Exemple
Exemplul 1: Reexport de tip și const enum ambiental
Produs este o interfață, deci reexportul cere export type. declare const enum nu are cod la rulare, iar o unealtă care vede doar acest fișier nu poate înlocui Culoare.Rosu cu valoarea lui.
// tsconfig.json
{
"compilerOptions": {
"isolatedModules": true,
"module": "nodenext",
"noEmit": true
}
}
// tipuri.ts
export interface Produs {
nume: string;
pret: number;
}
export const MONEDA = "lei";
// index.ts
export { Produs, MONEDA } from "./tipuri.js";
declare const enum Culoare { Rosu, Verde }
console.log(Culoare.Rosu);
Rezultat (tsc 5.9)
$ npx tsc
index.ts(1,10): error TS1205: Re-exporting a type when 'isolatedModules' is enabled requires using 'export type'.
index.ts(4,13): error TS2748: Cannot access ambient const enums when 'isolatedModules' is enabled.
Exemplul 2: Varianta corectă
Tipul este marcat cu type, deci orice unealtă știe că trebuie șters. Codul rulează identic.
interface Produs {
nume: string;
pret: number;
}
export type { Produs };
export const MONEDA = "lei";
const p: Produs = { nume: "caiet", pret: 7.5 };
console.log(`${p.nume}: ${p.pret} ${MONEDA}`);
Rezultat
caiet: 7.5 lei
Greșeli frecvente
- Să compilezi cu esbuild/Vite fără
isolatedModulesși să ai erori ciudate la rulare (does not provide an export named). tsc ar fi prins cazul cu opțiunea pornită.
Comenzi înrudite
verbatimModuleSyntax: Importurile rămân exact cum sunt scrise; se șterg doar cele marcate cu type, deci tipurile trebuie importate cu import type.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.erasableSyntaxOnly: Interzice construcțiile TypeScript care generează cod (enum, namespace, parametri-proprietate), ca Node.js să poată rula direct fișierele .ts.preserveConstEnums: Păstrează în JavaScript obiectul unui const enum; folosirile lui sunt tot înlocuite cu valorile.