我们正在将一些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;
}
}
答案 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();