"isolatedModules"

Pilnuje, żeby każdy plik dało się przetłumaczyć na JavaScript osobno, bez wiedzy o reszcie projektu.

Na tej stronie

Przykład

#
JSON
{
  "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

#
Składnia
"isolatedModules": true

Więcej przykładów

#
Ponowny eksport typu
TypeScript
// src/index.ts
export { Course, formatTitle } from './course'
// Błąd: Re-exporting a type when 'isolatedModules' is enabled requires using 'export type'.
Poprawiony eksport
TypeScript
// 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 (lub verbatimModuleSyntax). 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

#

Widzisz błąd albo brakuje przykładu? Napisz do nas.