TypeScript allowJs和outFile不';t发出JS模块

TypeScript allowJs和outFile不';t发出JS模块,typescript,Typescript,下面从TypeScript 1.8发行说明中摘录的内容表明,在下面的示例中,bar.js的内容应该作为最终捆绑输出中的“bar”模块发出,因为我在tsconfig中使用了allowJs 摘录自: .js文件现在可以作为tsc的输入。TypeScript编译器检查input.js文件的语法错误,并根据--target和--module标志发出有效输出。输出也可以与其他.ts文件组合。源映射仍然为.js文件生成,就像.ts文件一样 tsconfig.json——注意allowJs和outFile选项

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

摘录自:

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

tsconfig.json——注意
allowJs
outFile
选项

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

梅因酒店

福茨

bar.js

巴氏硬度计

tsc 1.8.10在build.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();
});
为什么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”。

在这种情况下,我得到一个编译错误,
属性“run”在类型“typeof”…[filepath]/bar上不存在“.
--通过声明文件在JS文件上键入信息和绑定所述JS文件是相互排斥的,这是真的吗?也就是说,因为
bar.JS
没有名为
run
的导出。它确实有一个
默认值
仅导出。将其更改为
导出默认函数run(){…
,错误应该会消失。哦,我的错。我的意思是foo.ts和bar.ts实际上是相同的,在这种情况下,只要我删除bar.d.ts,这一切都能正常工作。谢谢!
export function run() {
    console.log("Foo runnning!");
}
export function run() {
    console.log("Bar running!");
}
export function run(): void;
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();
});