TypeScript - 分离代码输出
-
13-12-2019 - |
题
我正在尝试打字稿,我发现它非常有用。
我有一个相当大的项目,我正在考虑使用打字稿重写它。这里的主要问题如下:
文件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;
不隶属于 StackOverflow