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

これが実際に行うことは、このオブジェクトのインスタンスを作成できることをコンパイラに伝えることです (これはクラスとして宣言されていないため必要です)。宣言にこの行がないと、インスタンスを作成するコードをコンパイルするときに「無効な新しい式」エラーが発生します。

:この特定のケースでは、実行時エラーが発生します。これは、HTMLDivElement「newable」であってはならないことがわかる限りです。new(): HTMLDivELement;が lib.d.ts から削除された場合、コンパイラは実際にはこれを行うことができないことを正しく警告します。

prototype: HTMLDivElement;

このコード行がないと、オブジェクトのインスタンスでメソッドとプロパティを使用できますが、プロトタイプをオーバーライドすることはできません。

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