Comprensión de "objetivo" y "módulo" en tsconfig

82

A continuación se muestra mi tsconfig.jsonarchivo en el que he configurado el objetivo es5y 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?

refactorizar
fuente

Respuestas:

60

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:

"Anteriormente marcado como una combinación de indicadores no válida, target: es5 y 'module: es6' ahora son compatibles. Esto debería facilitar el uso de vibradores de árboles basados ​​en ES2015 como rollup".

Jim
fuente
4
¿Alguno de estos indicadores define en qué lenguaje y sistema de módulos se genera el código compilado, o estos indicadores son solo para determinar cómo se debe analizar la fuente de entrada?
Tom
1
"El sistema de módulos es independiente de la implementación del lenguaje". ¿Sabe por qué es así? ¿Alguna documentación disponible para esto?
KaushikTD
18

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 .

Alexey Grinko
fuente