2014-09-12 76 views
0

所以我有一個現有的大型定義文件。可以說這是一個樹項目TypeScript定義文件。外部插件

declare module Project{ 

    class Tree{ 
     x: number; 
     y: number; 
    } 

    module Plugins{ 

     class Plugin{ 

     } 

    } 

} 

所以這是在主項目d.ts文件。都好。讓我們說這現在只讀,以表明它不應該被編輯。

但現在有人已經出現並決定編寫一個插件,但主定義是隻讀的,不應該被編輯。例如,有人制作了武器插件。他們需要項目插件weapon.d.ts

部分要求是這個插件添加數據到原始庫。因此,「武器」被添加到樹,它看起來像這樣在JS:

Project.Tree.prototype.weapon = X 

所以項目的插件,weapon.d.ts看起來像這樣

declare module Project { 

    module Plugins { 

     class Weapons{ 

     } 

     module Weapons{ 

      class Gun{ 

      } 

     } 

    } 

} 

但我怎麼能連接武器屬性到現有的主d.ts文件?

在project.d.ts文件中,Tree類必須是類,因爲您可以實例化它。我試圖創建一個ITree界面,以便class Tree implements ITree但是當我嘗試從project-plugin-weapon.d.ts中添加到該界面時,它會抱怨我的project.d.ts文件沒有實現屬性武器。

declare module Project { 

    interface IGame{ 

     weapon: Gun; //complaint that Project.d.ts::Game does not implement weapon 

    } 

    module Plugins { 

     class Weapon{ 

     } 

     module Weapon{ 

      class Gun{ 

      } 

     } 

    } 

} 

那麼如何構造一個定義文件來解決這個問題呢?

請注意,我已經看到JQuery作爲示例,但JQuery在其定義中沒有類。 Tree()需要構造函數的事實阻止我簡單地複製JQuery-Plugin方法。

謝謝!

+0

爲什麼你不能只傳遞多個.d.ts文件到編譯器? – Ameen 2014-09-12 16:07:51

+0

嗨Ameen,我會很樂意,但是這個插件擴展了更大定義的部分。如果'class Gun擴展了Project.Something',它將需要在新定義中重新定義Project.Something。在這種情況下,我相信我會得到一個稍微不同但相關的錯誤,因爲Project.Tree會跨2個文件重複。 – Clark 2014-09-12 16:20:13

回答