2012-10-03 89 views
1

我想打字稿,我觉得它非常有用。TypeScript - 分离代码输出

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

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

再次编译使用相同的命令

tsc --out compiledA.js A.ts 

会导致A.ts在包含B.ts和A.ts代码的compiledA.js中。 (这可能是非常好的)

在我的情况下,我只需要在compiledA.js文件中编译A.ts代码,并且我不想让B.ts的东西在那里。

事实上,我想要的是:

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

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

有人可以告诉我,如果有办法做到这一点?

回答

2

经过一番研究,我发现这个问题是由--out介绍在编译器中的参数。

@silent__thought解决方案工作得很好,如果你想处理模块。如果你不是,你需要使用require语句(看问题),然后编译“main.ts”文件,而不需要--out参数

+0

好的提示!很明显,当我回答时我并没有意识到这一点。 :) 谢谢! – joshuapoehls

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系统导入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;