1

lib.d.ts 持有声明:

interface HTMLDivElement extends HTMLElement, ... {}

declare var HTMLDivElement: {
    prototype: HTMLDivElement;   // additional q: what does this mean?
    new(): HTMLDivElement;       // q: what does this mean?
}

我猜原型允许向 div 添加更多方法(虽然增强内置 js 类型无论如何都不是过度推荐),但对 new() 的含义猜测较少。

这个声明是什么意思,为什么它是必要的或有帮助的?

4

1 回答 1

2

这是这些行的概述...

new(): HTMLDivElement;

这意味着当您创建一个实例时,该实例的类型将为HTMLDivElement. 例如...

var elem = new HTMLDivElement(); // elem is of type HTMLDivElement

这实际上是告诉编译器你可以创建这个对象的实例(这是必需的,因为它没有被声明为一个类)。如果声明中没有这一行,则在编译创建实例的代码时会出现“无效的新表达式”错误。

注意:在这种特定情况下,您将收到运行时错误,因为据我所知, aHTMLDivElement不应该是“新的”。如果new(): HTMLDivELement;从 lib.d.ts 中删除,编译器实际上会正确警告您不能这样做。

prototype: HTMLDivElement;

如果没有这行代码,您将能够在对象的实例上使用方法和属性,但您将无法覆盖原型:

HTMLDivElement.prototype.getAttribute = function (name?: string) {
    return 'Go Away';
}
于 2013-09-05T11:06:35.947 回答