Typoskript: Zugriffsklasse in globaler Modul / Namensraum

stimmen
4

Ich habe die folgende Situation geraten:

module MyModule {
    export class Image {
        ...
    }

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

Allerdings möchte ich eine Instanz von HTMLImageElement, nicht MyModule.Image erstellen. Wie gebe ich, dass ich eine Klasse instanziiert will, das im globalen Modul / Namensraum liegt?

Vielen Dank!

Veröffentlicht am 08/10/2012 um 10:39
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
2

Es gibt viele Möglichkeiten, aber ich würde empfehlen die Verwendung document.createElementin welcher Weise auch immer. Beispielsweise:

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

Sie könnten Komfortfunktionen oder Klassen erstellen, die dies für Sie wickeln.

Einer der anderen Wege wären beispielsweise einen Verweis auf die ursprüngliche Image-Klasse vor Ihrer Klassendefinition zu erstellen:

var ImageElement = Image;

...

export class Image {
    ...
}

var image = new ImageElement()

aber es wird nicht so erkannt werden , HTMLImageElementbeispielsweise, dh ohne entsprechende Code - Vervollständigung.

edit : hier ist mein Nicht-Arbeits Versuch , das erweitern WindowSchnittstelle wie in den Kommentaren erwähnt:

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

Es kompiliert korrekt (dh ohne Fehler), aber in Visual Studio als Fehler markiert ist, zu sagen Duplicate Identifier 'Image', und versucht , eine Instanz zu schaffen , über new window.Image()sagen , werden markiert new expressions only valid on constructors. Interessanterweise funktioniert es auf anderen Schnittstellen in Ordnung, und wie bereits erwähnt, stellt sie richtig.

Beantwortet am 08/10/2012 um 14:50
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more