tsconfig模块选项 - '系统'参考SystemJS?

时间:2018-01-07 23:53:32

标签: angularjs angular typescript module

在tsconfig.json文件中,可以将以下选项指定为compilerOptions'模块的值。属性:

System

这样我们得到:

{
  "compilerOptions": {
    "module": "System",
     ...

系统是否引用SystemJS(即,当我创建AngularJS或Angular应用程序时,如果SystemJS被用作模块加载器我在tsconfig.json中总是需要' System')?文档似乎没有解释这一点:

https://www.typescriptlang.org/docs/handbook/compiler-options.html

在TypeScript的Visual Studio项目配置中,还有一个' System' ' TypeScript Build>下的选项模块系统',显然是指系统'系统'在tsconfig.json中。

1 个答案:

答案 0 :(得分:2)

是的它指的是SystemJS,如果您希望TypeScript编译器按预期运行并生成您期望的代码,那么显式包含它是很重要的。如果您未指定,TypeScript将恢复为基于当前target ES版本生成(并期望)代码(默认为ES3,触发commonjs模块)。如编译器文档中所述,它将影响其他默认编译器选项,如moduleResolutionallowSyntheticDefaultImports

例如,如果您有一个打字稿文件,如下所示

import { functionA } from './moduleA';
functionA();

如果您将module指定为system,则您生成的代码将使用系统调用:

System.register(["./moduleA"], function (exports_1, context_1) {
    "use strict";
    var __moduleName = context_1 && context_1.id;
    var moduleA_1;
    return {
        setters: [
            function (moduleA_1_1) {
                moduleA_1 = moduleA_1_1;
            }
        ],
        execute: function () {
            moduleA_1.functionA('Stuff');
        }
    };
});

但是,如果允许编译器默认为commonjs,则会生成:

"use strict";
var moduleA_1 = require('./moduleA');
moduleA_1.functionA('Stuff');

请注意,生成的代码可能因TS版本或其他标志而异。

来自测试/体验以及您关联的module resolutioncompiler文档。