A continuación se muestra mi tsconfig.json
archivo en el que he configurado el objetivo es5
y el módulo paraes6
{
"compilerOptions": {
"target": "es5",
"module": "es6"
}
}
Mi pregunta es porque los módulos [importación / exportación] son parte de es6 y NO es5, el código javascript transpilado no debería tener declaraciones de importación / exportación. Pero el código javascript que se genera tiene declaraciones de importación / exportación aunque el objetivo es es5, ¿cómo es posible?
typescript
refactorizar
fuente
fuente
Respuestas:
El sistema de módulos es independiente de la implementación del idioma. Los módulos ES6 (ES2015) usan la sintaxis
import
/export
, y es el cargador del módulo quien debe interpretarlo.Aquí ha especificado el uso del sistema de módulo ES2015, de modo que habilita la sintaxis del módulo ES6.
El propio JavaScript puede apuntar a ES5 y usar solo características de ES5, pero teóricamente es posible usar un cargador de módulo con ese código que opera con la sintaxis del módulo ES2015. Aunque es posible, no es necesariamente algo que desee hacer. Es más común usar módulos CommonJS o AMD con ES5 JavaScript.
Aparentemente, esta combinación ni siquiera estaba permitida antes de TypeScript 2.0. En las notas de la versión de TypeScript 2.0, dice:
fuente
Para complementar la respuesta anterior, en 2020 hay 4 opciones de configuración de TS que definen la resolución del módulo y la salida de compilación:
module
.target
.lib
.moduleResolution
.Los primeros 3 afectan su salida, mientras que el último afecta la forma en que el compilador busca sus módulos para resolverlos y agruparlos.
Aquí hay un artículo excelente y conciso acerca de estas opciones: Confusión de TypeScript: módulo tsconfig.json, moduleResolution, target & lib explicado de Tom Medema | Medio .
Además, un documento sobre la resolución del módulo: TypeScript: Handbook - Module Resolution .
fuente