以下来自TypeScript 1.8发行说明的摘录表明,在下面的示例中,由于我在tsconfig中使用allowJs,因此bar.js的内容应作为最终捆绑输出中的“bar”模块发出。
摘自TypeScript 1.8 Release Notes:
.js文件现在被允许作为tsc的输入。 TypeScript编译器检查输入.js文件是否存在语法错误,并根据--target和--module标志发出有效输出。输出也可以与其他.ts文件组合使用。仍然为.js文件生成源映射,就像.ts文件一样。
tsconfig.json - 请注意allowJs
和outFile
选项
{
"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();
});
答案 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”。