"isolatedModules"
Pilnuje, żeby każdy plik dało się przetłumaczyć na JavaScript osobno, bez wiedzy o reszcie projektu.
Przykład
#{
"compilerOptions": {
"isolatedModules": true,
"noEmit": true
}
}Definicja i zastosowanie
#Narzędzia takie jak esbuild, SWC i Babel, używane przez Vite, Next.js czy Jest, tłumaczą TypeScript na JavaScript plik po pliku i nie analizują typów. Opcja isolatedModules zgłasza konstrukcje, których w ten sposób nie da się przetłumaczyć poprawnie, zanim zamienią się w błąd w działającym programie.
Opcja nie zmienia wygenerowanego kodu, dodaje tylko sprawdzenia. Najczęściej wymaga oznaczania ponownych eksportów typów przez export type i zabrania odczytu wartości z declare const enum, bo narzędzie widzące jeden plik nie wie, czy dana nazwa jest typem, ani jaka wartość kryje się za stałą.
Szablony projektów zwykle mają ją włączoną, w tym plik tworzony przez tsc --init od TypeScriptu 5.9. Te same sprawdzenia włącza opcja verbatimModuleSyntax, więc przy niej isolatedModules jest zbędne.
Składnia
#"isolatedModules": trueWięcej przykładów
#// src/index.ts
export { Course, formatTitle } from './course'
// Błąd: Re-exporting a type when 'isolatedModules' is enabled requires using 'export type'.// src/index.ts
export { type Course, formatTitle } from './course'
// albo w dwóch liniach:
// export type { Course } from './course'
// export { formatTitle } from './course'Dobre praktyki
#- Używasz Vite, Next.js, esbuild albo SWC? Włącz
isolatedModules(lubverbatimModuleSyntax). Kompilator ostrzeże przed kodem, który bundler przetłumaczyłby błędnie. - Opcja nie przyspiesza
tsc. Sprawdzanie typów nadal obejmuje cały projekt, zmienia się tylko zestaw dozwolonych konstrukcji. - Przy ponownym eksporcie typów pisz
export type { … }albo oznaczaj pojedyncze nazwy:export { type A, b }.
Powiązane hasła
#- "verbatimModuleSyntax"Importy bez słowa type zostają w JavaScripcie bez zmian, więc importy typów trzeba oznaczać jawnie.
- import typeImport samych typów, który w całości znika z wygenerowanego JavaScriptu.
- enumNazwany zestaw stałych wartości, liczbowych lub tekstowych.
- "module"Format modułów w wygenerowanym kodzie i sposób rozumienia importów.
- "target"Wersja JavaScriptu, do której kompilator zamienia kod.
Widzisz błąd albo brakuje przykładu? Napisz do nas.