2016-09-07 39 views
0

我想在使用打字稿中設置基於angularJS的代碼。Typescript繼承與單獨的編譯文件

使用'generator-gulp-angular'模塊使用yeoman.io創建初始項目結構。 對於我的企業代碼嘗試使用打字稿,我遵循此TypeScript - How to keep compiled files in a separate directory?將js文件分隔到另一個目錄。

所有不同的JS文件都會自動合併到單個JS文件中 - 這是與yeoman生成的代碼一起提供的。

我面臨的問題是我想在編譯TS代碼base.js和derived.js生成後使用typescript的繼承特性。

不確定是不是一個對象(評估「b.prototype」)

搜索後: 然而,當我運行一飲而盡構建,它試圖推出phantomJS它給了我下面的錯誤(再次與自耕農代碼來)淨我發現它與序列的JS文件被加載,但在我的情況下,我有一個單一的JS文件。

回答

0

你的單個JS文件仍然是單獨編譯文件的串聯(大部分)。您的錯誤提示您輸出文件中的順序錯誤。

解決此問題的最快方法是使用TypeScript引用標記。從子類中引用基類,如下所示:

/// <reference path='./base.ts' /> 

不要引用其他方式。現在編譯器應該遵守輸出文件中的順序。

雖然我必須警告你:看看ES6風格的模塊和模塊加載器。 參考策略有縮放問題。

+0

得到了關於參考路徑的觀點。是否總是需要單個輸出文件,或者我可以使用多個文件? – akhileshcoer

+0

該參考文件基本上告訴TypeScript期望「在那裏」 - 就是這樣。它與最終捆綁過程分開。但是,當使用* outFile *選項時,編譯器會照原樣將引用視爲依賴關係,並調整拼接順序(如果引用的文件位於編譯文件的範圍內)。當然你可以忍受這一點,但它不會很好。引用標籤不是真正的依賴關係,只是參考。 – sgrtho

+0

對於單個輸出文件:使用Node時,您永遠不需要單個輸出文件,因爲Node可能需要文件系統中的模塊 - 無論如何都需要使用ES6樣式模塊。在遠程/瀏覽器環境中,您需要一些東西來彌補您的文件/模塊之間的差距。這可以是一個提供* everything *的單個輸出文件,您可以像使用browserify這樣的工具(再次使用ES6模塊)更高級地實現這一點。或者一些異步加載機制。 – sgrtho