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.  

编辑 - 分辨率

我接受了 Ryan 的想法并稍作修改

框架.d.ts

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

当前.ts

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

1 回答 1

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();
于 2012-12-12T17:43:55.857 回答