馃敟 MODULES, OUTPUT OPTIONS (OPCIONES DE SALIDA DE LOS M脫DULOS)

Existen dos opciones que afectan el archivo emitido por JavaScript.

  • target que determina que caracter铆sticas de JS son rebajadas (convertidas para ser ejecutadas en runtimes antiguos de JS) y cuales son dejadas intactas.
  • module que determina que c贸digo es utilizado por m贸dulos para interactuar con cada uno de ellos.

El target que utilice es determinado por las caracter铆sticas disponibles en el runtime de JS en el cual se desea ejecutar el c贸digo de TypeScript. Este puede ser: el navegador mas antiguo soportado, la versi贸n mas antigua de NodeJS o caracter铆sticas exclusivas como un ambiente Electron.

Toda la comunicaci贸n entre m贸dulos sucede v铆a el module loader, el par谩metro module del compilador determina cual ser谩 utilizada. Durante el tiempo de ejecuci贸n, el modulo loader es responsable por localizar y ejecutar todas las dependencias de un m贸dulo antes de ejecutarlo.

Por ejemplo, el siguiente es un archivo de TypeScript que utiliza la sintaxis de m贸dulos para ES, enseguida el resultado en base a los distintos valores que puede tener el par谩metro module.

import { valueOfPi } from './constants.js'

export const twoPi = valueOfPi * 2

ES2020

import { valueOfPi } from './constants.js'
export const twoPi = valueOfPi * 2

CommonJS

'use strict'
Object.defineProperty(exports, '__esModule', { value: true })
exports.twoPi = void 0
const constants_js_1 = require('./constants.js')
exports.twoPi = constants_js_1.valueOfPi * 2

UMD

;(function (factory) {
    if (typeof module === 'object' && typeof module.exports === 'object') {
        var v = factory(require, exports)
        if (v !== undefined) module.exports = v
    } else if (typeof define === 'function' && define.amd) {
        define(['require', 'exports', './constants.js'], factory)
    }
})(function (require, exports) {
    'use strict'
    Object.defineProperty(exports, '__esModule', { value: true })
    exports.twoPi = void 0
    const constants_js_1 = require('./constants.js')
    exports.twoPi = constants_js_1.valueOfPi * 2
})

Podemos darnos cuenta que ES2020 es exactamente igual que el archivo TypeScript.