1271 Stimmen

Wie legt man in TypeScript explizit eine neue Eigenschaft für "Fenster" fest?

Ich richte globale Namensräume für meine Objekte ein, indem ich explizit eine Eigenschaft auf window .

window.MyNamespace = window.MyNamespace || {};

TypeScript unterstreicht MyNamespace und beschwert sich darüber:

Die Eigenschaft 'MyNamespace' existiert nicht auf valu any"

Ich kann den Code zum Laufen bringen, indem ich deklariere MyNamespace als Umgebungsvariable und das Weglassen der window aber das will ich nicht.

declare var MyNamespace: any;

MyNamespace = MyNamespace || {};

Wie kann ich die window einfügen und TypeScript glücklich machen?

Als Randbemerkung finde ich es besonders lustig, dass TypeScript sich beschwert, da es mir sagt, dass window ist vom Typ any die durchaus alles enthalten kann.

17voto

Irshad Punkte 868

TypeScript führt keine Typüberprüfung für String-Eigenschaften durch.

window["newProperty"] = customObj;

Idealerweise sollte das Szenario der globalen Variablen vermieden werden. Ich verwende es manchmal, um ein Objekt in der Browserkonsole zu debuggen.

17voto

tomoe Punkte 359
// In typings.d.ts(is Global)
export declare global {
    interface Window {
        __PUBLIC__: string;
    }
}

enter image description here

16voto

Alireza Punkte 92209

Verwendung von

window["MyNamespace"] = window["MyNamespace"] || {};

sollte in Ordnung sein, da es eine String-Eigenschaft verwendet, aber wenn Sie wirklich ein separates Fenster haben und Ihren Code organisieren wollen, können Sie erweitern. das Fensterobjekt:

interface MyNamespacedWindow extends Window {
    MyNamespace: object;
}

declare var window: MyNamespacedWindow;

16voto

Nik Sumeiko Punkte 7384

So geht's, wenn Sie Folgendes verwenden TypeScript-Definitionsmanager !

npm install typings --global

erstellen. typings/custom/window.d.ts :

interface Window {
  MyNamespace: any;
}

declare var window: Window;

Installieren Sie Ihre benutzerdefinierte Typisierung:

typings install file:typings/custom/window.d.ts --save --global

Erledigt! Benutze es! TypeScript wird sich nicht mehr beschweren:

window.MyNamespace = window.MyNamespace || {};

12voto

Mav55 Punkte 3850

Zuerst müssen Sie das Fensterobjekt in der aktuellen Bereich deklarieren. Da TypeScript den Typ des Objekts Objekts wissen. Da die Fenster Objekt an anderer Stelle definiert ist, können Sie es nicht umdefinieren.

Sie können es aber wie folgt deklarieren:

declare var window: any;

Dadurch wird weder das Fensterobjekt neu definiert, noch wird eine weitere Variable mit dem Namen window . Dies bedeutet Fenster irgendwo anders definiert ist und Sie nur im aktuellen Bereich darauf verweisen.

Dann können Sie auf Ihr MyNamespace-Objekt einfach durch verweisen:

window.MyNamespace

Oder Sie können die neue Eigenschaft in der window Objekt einfach durch:

window.MyNamespace = MyObject

Und jetzt wird sich TypeScript nicht mehr beschweren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X