我正在尝试打字稿,我发现它非常有用。
我有一个非常大的项目,我正在考虑使用打字稿来重写它。这里的主要问题如下:
文件A.ts:
class A extends B {
// A stuff
}
文件B.ts:
class B {
// B stuff
}
如果我用这个命令编译A.ts:
tsc --out compiledA.js A.ts
我会从编译器中得到错误,因为他不知道在扩展后如何威胁“B”。
因此,“解决方案”将包含在A.ts中(作为第一行代码):
/// <reference path="./B.ts" />
使用相同的命令再次编译A.ts
tsc --out compiledA.js A.ts
将导致compileA.js包含B.ts和A.ts代码。 (这可能非常好)
在我的情况下,我只需要在compiledA.js文件中编译A.ts代码,我不希望B.ts的东西在那里。
确实,我想要的是:
我可以通过删除“extends”关键字来实现,但这样做我将放弃大部分打字稿的优点。
如果有办法,有人可以告诉我吗?
答案 0 :(得分:2)
经过一些研究后我发现问题是由编译器中的--out参数引入的。
如果你想处理模块,@ pilent__thought解决方案可以正常工作。如果你不是你需要使用require语句(查看问题)然后编译“main.ts”文件而不用--out参数答案 1 :(得分:0)
编辑:正如Andrea所指出的,如果省略--out
参数,您将获得预期的行为,即没有源文件的组合。我会留下这个替代解决方案,因为它可以帮助其他人。
我相信你必须使用外部模块语法(CommonJS或AMD)才能做到这一点。
使用您的示例:
<强> a.ts 强>
import B = module("b")
class A extends B.B {
// A stuff
}
<强> b.ts 强>
export class B {
// B stuff
}
使用tsc --out compiledA.js A.ts
进行编译。
这会导致a.js
使用CommonJS系统导入b.js
。生成的文件如下所示:
<强> a.ts 强>
var __extends = this.__extends || function (d, b) {
function __() { this.constructor = d; }
__.prototype = b.prototype;
d.prototype = new __();
}
var B = require("./b")
var A = (function (_super) {
__extends(A, _super);
function A() {
_super.apply(this, arguments);
}
return A;
})(B.B);
<强> b.ts 强>
var B = (function () {
function B() { }
return B;
})();
exports.B = B;