4

次の状況があります。

module MyModule {
    export class Image {
        ...
    }

    var image = Image(); // returns an instance of MyModule.Image
}

ただし、MyModule.Image ではなく、HTMLImageElement のインスタンスを作成したいと考えています。グローバル モジュール/名前空間に存在するクラスをインスタンス化することを指定するにはどうすればよいですか?

ありがとうございました!

4

1 に答える 1

2

いろいろな方法がありますがdocument.createElement、どのような方法でも使用することをお勧めします。例えば:

var image = <HTMLImageElement>document.createElement('img');

これをラップする便利な関数またはクラスを作成できます。

他の方法の 1 つは、たとえば、クラス定義の前に元の Image クラスへの参照を作成することです。

var ImageElement = Image;

...

export class Image {
    ...
}

var image = new ImageElement()

ただし、インスタンスとして認識されませんHTMLImageElement。つまり、適切なコード補完はありません。

編集:コメントに記載されているように、インターフェースを拡張するための私の非機能的な試みは次のとおりです。Window

interface Window {
    Image: new(width?: number, height?: number) => HTMLImageElement;
}

正しくコンパイルされます (つまり、エラーなし) が、Visual Studio ではエラーとしてフラグが付けられ、 と表示されDuplicate Identifier 'Image'、インスタンスを作成しようとすると とnew window.Image()フラグが付けられますnew expressions only valid on constructors。興味深いことに、他のインターフェイスでも問題なく動作し、既に述べたように正しくコンパイルされます。

于 2012-10-08T13:50:16.787 に答える