Ниже мой tsconfig.json
файл, в котором я установил цель es5
и модуль дляes6
{
"compilerOptions": {
"target": "es5",
"module": "es6"
}
}
Мой вопрос в том, что модули [импорт / экспорт] являются частью es6, а НЕ es5, транспилированный код javascript не должен иметь операторов импорта / экспорта. Но сгенерированный код javascript имеет операторы импорта / экспорта, даже если целью является es5, как это возможно?
typescript
рефакторинг
источник
источник
Ответы:
Модульная система не зависит от языковой реализации. Модули ES6 (ES2015) используют синтаксис
import
/export
, и загрузчик модуля должен его интерпретировать.Здесь вы указали использование модульной системы ES2015, чтобы включить синтаксис модуля ES6.
Сам JavaScript может быть нацелен на ES5 и использовать только функции ES5, но теоретически можно использовать загрузчик модуля с этим кодом, который работает с синтаксисом модуля ES2015. Хотя это возможно, это не обязательно то, чем вы хотели бы заниматься. Чаще используются модули CommonJS или AMD с ES5 JavaScript.
Очевидно, такая комбинация была недопустима до TypeScript 2.0. В примечаниях к выпуску TypeScript 2.0 говорится:
источник
Чтобы дополнить предыдущий ответ, в 2020 году есть 4 параметра конфигурации TS, которые определяют разрешение модуля и вывод компиляции:
module
.target
.lib
.moduleResolution
.Первые 3 влияют на ваш вывод, а последние влияют на то, как компилятор ищет ваши модули, чтобы разрешить их и связать.
Вот отличная и краткая статья об этих параметрах: Путаница в Typescript: описание модуля tsconfig.json, moduleResolution, target и lib | Тома Медема | Средний .
Кроме того, документ о разрешении модуля: TypeScript: Handbook - Module Resolution .
источник