TypeScript allowJs和outFile不会发出JS模块

时间:2016-06-13 16:17:58

标签: typescript

以下来自TypeScript 1.8发行说明的摘录表明,在下面的示例中,由于我在tsconfig中使用allowJs,因此bar.js的内容应作为最终捆绑输出中的“bar”模块发出。

摘自TypeScript 1.8 Release Notes

  

.js文件现在被允许作为tsc的输入。 TypeScript编译器检查输入.js文件是否存在语法错误,并根据--target和--module标志发出有效输出。输出也可以与其他.ts文件组合使用。仍然为.js文件生成源映射,就像.ts文件一样。

tsconfig.json - 请注意allowJsoutFile选项

{
"compilerOptions": {
    "module": "amd",
    "target": "es5",
    "allowJs": true,
    "outFile": "built.js"
},
"files": [
    "main.ts"
]

}

main.ts

import * as foo from './foo';
import * as bar from './bar';

foo.run();
bar.run();

foo.ts

export function run() {
    console.log("Foo runnning!");
}

bar.js

export function run() {
    console.log("Bar running!");
}

bar.d.ts

export function run(): void;

tsc 1.8.10虽然在 built.js 中发出此输出。我的问题是为什么bar.js中的模块不包含在发出的输出中?

define("foo", ["require", "exports"], function (require, exports) {
    "use strict";
    function run() {
        console.log("Foo runnning!");
    }
    exports.run = run;
});
define("main", ["require", "exports", "foo", './bar'], function (require, exports, foo, bar) {
    "use strict";
    foo.run();
    bar.run();
});

1 个答案:

答案 0 :(得分:2)

  

为什么bar.js中的模块不包含在发出的输出中?

您已为模块“bar”提供了.d.ts(bar.d.ts)文件。 .d.ts文件有更多的类型信息,因此它比.js文件更受青睐。

删除bar.d.ts文件将允许编译器查找并选取bar.js,输出应该是您所期望的。

通常具有相同名称的文件,但在同一位置的不同扩展名是混乱的,因为它与模块解析逻辑混淆。编译器将尝试按此顺序查找“mod.ts”,“mod.tsx”,“mod.d.ts”,“mod.js”,“mod.jsx”。