2012-12-12 79 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(); 
相关问题