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()的含义猜测较少。
这个声明是什么意思,为什么有必要或有帮助?
答案 0 :(得分:2)
以下是这些行的概述......
new(): HTMLDivElement;
这意味着在创建实例时,该实例的类型将为HTMLDivElement
。例如......
var elem = new HTMLDivElement(); // elem is of type HTMLDivElement
这真正做的是告诉编译器你可以创建这个对象的实例(这是必需的,因为它没有被声明为一个类)。如果在编译创建实例的代码时,如果声明中没有这一行,则会出现“无效的新表达式”错误。
注意:在这种特定情况下,您将收到运行时错误,因为据我所知,HTMLDivElement
不应该是“新的”。如果从lib.d.ts中删除new(): HTMLDivELement;
,编译器实际上会正确警告您不能这样做。
prototype: HTMLDivElement;
如果没有这行代码,您将能够在对象的实例上使用方法和属性,但是您将无法覆盖原型:
HTMLDivElement.prototype.getAttribute = function (name?: string) {
return 'Go Away';
}