2012-11-12 27 views
27

我們有一個已經存在的JavaScript系統。如何慢慢移動到/遷移到打字稿在現有的JavaScript系統

我們想要做什麼: 我們想開始打字稿集成到當前系統;我們不能將所有內容都移動到TypeScript中。我們想要慢慢開始在TypeScript中編寫一些新的模塊。

我們嘗試: 我們使用組織我們JS代碼呈三角模塊打字稿構造一個模式。

我們試圖重寫打字稿一個簡單的類/對象,並取得了成功,但我們不得不在訪問我們的代碼中定義的,在其他文件JS功能的麻煩。

遇到的問題: 我們必須創建虛擬接口,使用這些接口等虛擬功能

所以問題: 任何人都可以評論,這將是緩慢整合打字稿最好的方法到現有的JavaScript系統中。

回答

30

這聽起來像你有一個合理的計劃。這是我的觀察!

最好確保您的TypeScript取決於您的JavaScript,而不是其他方式儘可能。這是因爲使用Visual Studio工具重構TypeScript非常容易,但它不會重構調用TypeScript的JavaScript。

你將不得不寫定義文件的JavaScript代碼,你需要從打字稿調用零件。您需要平衡編寫定義的成本與簡單地將JavaScript轉換爲TypeScript的成本。

如果您只調用一個函數,只需編寫該函數的定義 - 不要在需要的時候編寫定義。這樣可以降低調用舊代碼的成本。

你也可以臨時使用any類型與調用JavaScript代碼的任何脫身。當你將文件轉換爲TypeScript時,你會得到更好的類型檢查。這是一個「取決於」的決定點。而不是花時間寫一個定義,你可以節省時間在類型檢查的代價。

例如...

declare var MyExistingClass: any; 

您現在可以調用...

var example = new MyExistingClass.Anything(); 
example.anythingYouLike(); 

你必須決定作爲一個團隊,這是可以接受的,或者如果你想寫的定義:

declare class MyExistingClass { 
    anythingYouLike(): void; 
} 

我希望這有助於。

+0

謝謝史蒂夫!是的,這有幫助,很高興知道選項是什麼。問題是,我們現在添加了很多特定的代碼,而大部分可重用代碼已經被寫入;容易證明在新的東西上嘗試使用打字稿是正確的,而不是在重寫測試過的模塊上。但這意味着需要編寫很多定義。所以沒有辦法簡單地導入一個JS文件,以便TypeScript至少知道某個函數存在? –

+0

您可能會發現,如果將JavaScript粘貼到TypeScript文件中,編譯器將能夠爲您推斷出所有類型,但通常會發現JavaScript包含一些需要修復的不兼容性。 – Fenton