2017-09-14 30 views
0

我有一箇舊的打字稿項目,它使用處理.d.ts文件的/typings/tsd.json方法,它還使用Typescript的module關鍵字將源代碼編譯爲JavaScript的IIFE模塊模式。 tsconfig.json中的模塊設置(commonjs/amd/etc)被該關鍵字忽略。如何混合環境和非環境打字稿定義文件

對於演示,我加入​​到這個項目當中使用的importexport關鍵字比較典型的方法有SystemJS模塊加載一些較新的打字稿代碼,與.d.ts文件/ node_modules/@類型/。

一些咕嘟咕嘟/ SystemJS體操後,這一切都一起工作在運行時,我的軌道上打我的最後期限。但是我在編譯時遇到了一個我想解決的情況。

當我修改舊的代碼使用來自新代碼的類(模型),我想舊代碼來了解新代碼的.d.ts。所以我添加到舊代碼的文件/// <reference path="../../newercode/feature4/models/NewerModels.d.ts"/>的頂部。 (或者,我把相同的行放在tsd.d.ts中,但我得到了相同的結果。)

編譯器抱怨我的舊代碼「已經或正在使用私有名'NewModel'」。

Inside NewerModels.d.ts importexport關鍵字仍然存在,而.d.ts文件中沒有任何文件已經在/ typings /中使用這些關鍵字。這些關鍵字是虛假編譯器錯誤的罪魁禍首。

遺留項目希望環境.d.ts文件,新的代碼生成非環境。

有什麼我可以做的嗎?

+0

我建議不要繼續使用'tsd',遷移使用'@types'。你應該能夠一次完成。 – unional

+0

您獲取包的.d.ts文件根據您從何處獲取而有所不同。如果我這樣做了,那麼所有的.d.ts文件都會導入/導出關鍵字,因此沒有一個遺留代碼可以編譯。 –

+0

從'@ types'得到的新文件應該有相同的語法。原始庫仍然是相同的CommonJS庫(除非發生變化,那麼您需要處理版本控制)。 'tsd'從DefinitelyTyped獲取文件,與'@ types'相同。 TS團隊做了合理的工作並轉換格式。試試看看它是否有效。 – unional

回答

0

我目前的解決方案並不理想,但它適用於演示目的。

我下/分型/,創建一個新的文件夾,名爲/特點4/和文件複製有關.d.ts到那裏。編輯他們刪除export關鍵字,根據需要去除import關鍵字修改和替換class關鍵字與interface防止修補遺留代碼試圖從一個原始new NewerModel()電話。

最後一點顯然不起作用,因爲較新的類實際上不存在於全局命名空間中,並且從classinterface的變化有助於阻止這種情況。由於我主要抓型號,接口不損失不是要求new NewerModel()寫成<NewerModel>{}其他功能,但我仍然得到編譯時檢查的模式,這是什麼,我想反正95%的性能。

我也有被同樣的方式對待一些服務,但對他們的調用方法仍然工作,由於依賴注入。從未從全局名稱空間調用服務。

該解決方案顯然有一個問題,如果有人更改/newercode/feature4/models/NewerModels.ts,但是1)不應該有現在,截止日期之間的,和2),如果它是一個真正的問題我可以創建一個Gulp任務來自動複製和編輯每個版本上的文件.d.ts