TypeScript - 分隔代码输出

时间:2012-10-03 11:54:41

标签: typescript code-separation

我正在尝试打字稿,我发现它非常有用。

我有一个非常大的项目,我正在考虑使用打字稿来重写它。这里的主要问题如下:

文件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的东西在那里。

确实,我想要的是:

  • tsc --out A.js A.ts =&gt;只编译A.ts的东西
  • tsc --out B.js B.ts =&gt;只编译B.ts的东西

我可以通过删除“extends”关键字来实现,但这样做我将放弃大部分打字稿的优点。

如果有办法,有人可以告诉我吗?

2 个答案:

答案 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;
相关问题