2012-10-03 91 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;