2012-12-12 81 views
0

我們正在將一些javascript轉換爲打字稿。我們有我們拉出到由我們維護的其他JavaScript庫現有的一些功能,例如:擴展名稱不同的模塊

Framework.utils = { 
    utilFnOne: function()..., 
    utilFnTwo: function()..., 
    utilFnThree: function()..., 
} 

我們也有一些實用工具,我們在非框架代碼使用是這樣的:

Current.utils = Framework.utils; // Extend the framework's utils 
Current.utils.utilFnFour = function()...; 
Current.utils.utilFnFive = function()...; 

打字稿

我們可以創建一個框架庫定義如下:

declare module Framework.utils { 
    export function utilFnOne(); 
    export function utilFnTwo(); 
    export function utilFnThree(); 
} 

我們可以做這樣的事情創建一個Current.utils打字稿定義:

module Current.utils { 
    export function utilFnFour() {} 
    export function utilFnFive() {} 
    export class StringUtils { } 
} 

這將是很好,如果我們可以做這樣的事情:

module Current.utils extends Framework.utils { .... } 

使智能感知會展示來自Framework和Current的會員

Current.utils. 

編輯 - 分辨率

我把這個想法,瑞安曾和修改稍微

Framework.d.ts

declare module Framework { 
    export var util: _utilImpl; 
    export class _utilImpl { 
     utilFnOne(a: string) : string; 
    } 
} 

Current.ts

module Current { 
    export var util = new _utilImpl(); 
    export class _utilImpl extends Framework._utilImpl { 
     utilFnTwo(b: number) : number; 
    } 
} 

回答

1

您可以使用interface來重構這一點的module以獲得所需的行爲:

interface FrameworkUtils { 
    utilFnOne(s: string); 
    utilFnTwo(s: string); 
} 

declare module Framework { 
    export var utils: FrameworkUtils; 
} 

Framework.utils.utilFnOne(''); 

/// ... later 

interface CurrentUtils extends FrameworkUtils { 
    utilFnFour(); 
} 

declare module Current { 
    export var utils: CurrentUtils; 
} 

Current.utils.utilFnOne(''); 
Current.utils.utilFnFour(); 
相關問題