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?
}
我猜原型(prototype)允许向 div 添加更多方法(虽然无论如何都不会过度推荐增强内置 js 类型),但很少猜测 new() 的含义。
这个声明是什么意思,为什么它是必要的或有帮助的?
最佳答案
以下是这些行的概述...
new(): HTMLDivElement;
这意味着当您创建实例时,该实例的类型将为 HTMLDivElement
。例如...
var elem = new HTMLDivElement(); // elem is of type HTMLDivElement
这实际上是告诉编译器您可以创建该对象的实例(这是必需的,因为它没有声明为类)。如果声明中没有这一行,当您编译创建实例的代码时,您将收到“无效的新表达式”错误。
注意:在这种特定情况下,您将收到运行时错误,因为据我所知 HTMLDivElement
不应该是“可更新的”。如果从 lib.d.ts 中删除 new(): HTMLDivELement;
,编译器实际上会正确地警告您不能执行此操作。
prototype: HTMLDivElement;
如果没有这行代码,您将能够在对象实例上使用方法和属性,但无法覆盖原型(prototype):
HTMLDivElement.prototype.getAttribute = function (name?: string) {
return 'Go Away';
}
关于typescript - 声明 var HTMLDivElement { new(), prototype } 是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18634281/