🥇 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.