扩展具有不同名称的模块

时间:2012-12-12 16:14:17

标签: typescript

我们正在将一些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.  

修改 - 解决方案

我接受了Ryan的想法并略微修改了

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 个答案:

答案 0 :(得分: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();