我正在將現有的JavaScript應用程序轉換爲Typescript。我開始:爲名稱空間上暴露的方法創建類型定義
// file1.js
(function(ns) {
ns.bar = function() { };
}(window.MyNamespace || {}));
// file2.js
(function(ns) {
ns.Item = function() {
this.doStuff = function() { ns.bar(); };
}
}(window.MyNamespace || {}));
現在我將file2.js
以打字稿:
module MyNamespace {
class Item {
doStuff() {
MyNamespace.bar(); // This is obviously a problem
}
}
}
沒有與調用bar
問題。我知道將file1.js
轉換爲TypeScript會使事情變得更容易,但實際上這個文件非常大,所以我想在下一次衝刺時進行轉換並獲得中間狀態。
我該如何解決這個問題?如何告訴tsc bar
是模塊本身的功能?
我在module
及其變體中嘗試過declare var bar:() => void;
,但是到目前爲止它還沒有起作用。
我知道我可以考慮將那些「命名空間功能的」靜態方法的類,但這需要重寫file1.js
現在,我不想(還)。
我有一個解決辦法這樣的:
module MyNamespace {
var ns: any = MyNamespace;
class Item {
doStuff() {
ns.bar();
}
}
}
但是,這感覺有點過,至少不是因爲它需要改變內我class
,而我更願意有一個file2.ts
和file1.ts
之間的橋樑與最終file2.ts
東西分開。
從本質上說,我覺得我正在寫一個.d.ts
文件我原來file1.js
功能,這將使file2.ts
工作現在,在某種程度上可以保持轉換file1.js
到.ts
後保持不變。
任何提示?如何爲我未轉換的file1.js
創建打字?