1

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

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

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

将导致compiledA.js 包含B.ts 和A.ts 代码。(这可能非常好)

就我而言,我只需要在compiledA.js 文件中编译A.ts 代码,我不希望B.ts 的东西在那里。

确实,我想要的是:

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

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

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

4

2 回答 2

2

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

如果您想处理模块,@silent__thought 解决方案就可以正常工作。如果不是,则需要使用 require 语句(查看问题),然后在没有 --out 参数的情况下编译“main.ts”文件

于 2012-10-03T19:27:31.907 回答
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

这导致使用 CommonJS 系统进行a.js导入。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;
于 2012-10-03T13:59:44.477 回答