在lib.d.ts中定义的变量中扩展类型定义

时间:2018-02-14 13:32:36

标签: typescript

我有使用mootools进行转换的遗留代码。 Mootools引入了一个新的构造函数'元素'有两个参数。我没有为mootools找到任何类型定义文件,所以我必须自己编写。

typescript标准库(lib.d.ts)将Element定义如下:

R

这使得无法扩展现有接口。

我显然在尝试的是

  var Element: { prototype: Element; new(): Element; };

但是,编译器还是抱怨

interface Element {
        new(s: string, s2: any): Element;
}

var c = new Element('p',{}); 。这里的首选解决方法是什么?

mootools构造函数

the contructor expected 0 arguments, but got 2

1 个答案:

答案 0 :(得分:1)

您不需要扩展Element界面,您需要的是扩展Element变量的类型。这有点令人困惑,这是TS的两个独立实体。以下是如何做到的:

declare const Element: { // If you do that in a .d.ts file, you don't need declare.
    prototype: Element; // Element here is interface, we leave it unchanged.
    new(): Element; // Standard constructor.
    new(s: string, n: number): Element; // Your custom constructor.
};

const e = new Element('1', 2);

e.nodeName; // => string, i.e. result object implements Element interface.