"verbatimModuleSyntax"
Importy bez słowa type zostają w JavaScripcie bez zmian, więc importy typów trzeba oznaczać jawnie.
Przykład
#{
"compilerOptions": {
"module": "ESNext",
"moduleResolution": "Bundler",
"verbatimModuleSyntax": true
}
}Definicja i zastosowanie
#Opcja verbatimModuleSyntax wprowadza prostą zasadę: import lub eksport bez słowa type trafia do wygenerowanego JavaScriptu dokładnie tak, jak go napisano, a import type znika w całości. Kompilator przestaje sam zgadywać, które importy usunąć, bo służą tylko typom.
Dzięki temu wynik jest przewidywalny i taki sam w każdym narzędziu, które tłumaczy pliki pojedynczo, jak esbuild, SWC czy Babel. Import typu bez oznaczenia kończy się błędem, więc od razu widać, co zostanie w kodzie. Opcja włącza też wszystkie sprawdzenia isolatedModules.
Pojawiła się w TypeScripcie 5.0 i zastąpiła starsze opcje importsNotUsedAsValues oraz preserveValueImports. Najlepiej pasuje do projektów z modułami ES. W plikach kompilowanych do CommonJS zabrania składni import i export, bo tej składni nie da się tam zostawić bez zmian.
Składnia
#"verbatimModuleSyntax": trueWięcej przykładów
#import { Course, formatTitle } from './course'
// Błąd: 'Course' is a type and must be imported using a type-only import when 'verbatimModuleSyntax' is enabled.import type { Course } from './course'
import { type Lesson } from './lesson'
import { type Badge, formatTitle } from './format'
export function heading(course: Course, lesson: Lesson, badge: Badge): string {
return formatTitle(`${course.title}: ${lesson.title} (${badge.name})`)
}
// Wynik kompilacji:
// import {} from './lesson';
// import { formatTitle } from './format';
// export function heading(course, lesson, badge) { … }Dobre praktyki
#- Zaczynasz nowy projekt z bundlerem? Włącz
verbatimModuleSyntaxzamiast samegoisolatedModules. Dostajesz te same sprawdzenia i jedną prostą regułę dla importów. - Import, z którego bierzesz same typy, zapisuj jako
import type { … }. Wersjaimport { type A }zostawia w JavaScripcie pusty importimport {} from "…", który nadal ładuje moduł. - W projekcie Node.js na CommonJS pojawi się błąd „ECMAScript imports and exports cannot be written in a CommonJS file under 'verbatimModuleSyntax'”. Przejdź na moduły ES (pole
typez wartościąmodulewpackage.json) albo wyłącz tę opcję.
Powiązane hasła
#- import typeImport samych typów, który w całości znika z wygenerowanego JavaScriptu.
- "isolatedModules"Pilnuje, żeby każdy plik dało się przetłumaczyć na JavaScript osobno, bez wiedzy o reszcie projektu.
- "module"Format modułów w wygenerowanym kodzie i sposób rozumienia importów.
- "moduleResolution"Algorytm, którym kompilator odnajduje pliki wskazane w importach.
- "esModuleInterop"Ułatwia importowanie pakietów CommonJS składnią modułów ES.
Widzisz błąd albo brakuje przykładu? Napisz do nas.