Skip to content

TypeScript 的模块输出选项

有两个选项会影响JavaScript输出:

  • target ,它决定了哪些JS功能被降级(转换为在旧的JavaScript运行时运行),哪些保持不变
  • module ,它决定了哪些代码用于模块之间的相互作用。

你使用的 target 是由你期望运行TypeScript代码的JavaScript运行时中的可用功能决定的。这可能是:你支持的最古老的网络浏览器,你期望运行的最低版本的Node.js,或者可能来自于你的运行时的独特约束——比如Electron。

所有模块之间的通信都是通过模块加载器进行的,编译器选项 module 决定使用哪一个。在运行时,模块加载器负责在执行一个模块之前定位和执行该模块的所有依赖项。

例如,这里是一个使用ES模块语法的TypeScript文件,展示了 module 的一些不同选项:

typescript
import { valueOfPi } from "./constants.js"; 
export const twoPi = valueOfPi * 2;
  • ES2020
typescript
import { valueOfPi } from "./constants.js"; 
export const twoPi = valueOfPi * 2;
  • CommonJS
typescript
"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; 
});

请注意,ES2020实际上与原来的index.ts相同。

你可以在TSConfig 模块参考 中看到所有可用的选项以及它们发出的JavaScript代码是什么样子。