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

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

文件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

将生成包含 B.ts 和 A.ts 代码的已编译 A.js。(这可能非常好)

就我而言,我只需要在已编译的 A.js 文件中编译 A.ts 代码,并且我不希望 B.ts 内容存在其中。

确实,我想要的是:

  • tsc --out A.js A.ts => 仅编译 A.ts 内容
  • tsc --out B.js B.ts => 仅编译 B.ts 内容

我可以通过删除“extends”关键字来做到这一点,但这样做我会失去打字稿的大部分优点。

有人可以告诉我是否有办法做到这一点?

有帮助吗?

解决方案

经过一些研究,我发现问题是由编译器中的--out参数引入的。

@silent__thought解决方案如果您想处理模块,请运作正常。如果您不是您不需要使用Require语句(看问题),然后编译“main.ts”文件没有--out参数

其他提示

编辑: 正如安德里亚指出的,如果你省略 --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 输入 b.js 使用 CommonJS 系统。生成的文件如下所示:

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;
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top