TypeScript-Module
Frage ich mich, ob es irgendwie möglich ist, um zwei oder mehr Klassen in zwei oder mehr Dateien Hinzugefügt, um das gleiche Modul in Typoskript. So etwas wie dieses:
//src/gui/uielement.ts
module mylib {
module gui {
export interface UIElement {
public draw() : void;
}
}
}
//src/gui/button.ts
///<reference path='uielement.ts'/>
module mylib {
module gui {
export class Button implements UIElement {
constructor(public str : string) { }
draw() : void { }
}
}
}
Wird es wahrscheinlich Dutzende von GUI-Klassen, so dass Sie alle in der gleichen Datei ist nicht möglich. Und alle meine Klassen die 'mylib' - Modul.
Aber wie mache ich das?
Wenn die module mylib {...}
wird übersetzt in eine Funktion dann allen Inhalten aller mylib
Blöcke in allen Dateien sollten enthalten sein, die innerhalb der gleichen Funktion.
Ist, ist das überhaupt möglich?
Wenn ich compile bekomme ich diese:
$ tsc src/gui/button.ts
src/gui/button.ts(4,39): The name 'UIElement' does not exist in the current scope
- Ja, das wird unterstützt. Nicht sicher, warum Sie nicht einfach mal probieren.
- Ich habe. Sorry für die nicht erklären, die Fehler, die ich bekam...beschreiben weiter.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist genau, wie es funktioniert! Wenn man sich den generierten javascript-code, Sie hinzufügen in einer anonymen Funktion akzeptiert ein Objekt, die "das Modul-Objekt":
Wenn man sich die Letzte Zeile (
})(mylib || (mylib = {}));
) Sie sehen, dass es erzeugt ein neues ojbect (mylib = {}
) nur, wenn die vorhandene variable false ist (oder etwas, das zu false ausgewertet wird, wie null).So, alle "Module", die den gleichen Namen zusammengeführt werden, um das gleiche Objekt.
Daher interne Module erweitern sich gegenseitig. Ich muss feststellen, dass ich noch nicht ganz rausgefunden, was passiert mit geschachtelten Modulen.
Update: der code funktioniert bei mir, wenn ich nicht mit dem verschachtelten Modul syntax, aber ändern Sie es auf den Punkt-syntax. z.B.:
statt
Werde ich versuchen zu recherchieren, warum das passiert, soweit ich gelesen habe die spec, beide Arten gleich sein sollte.
Update: wenn die verschachtelten referenzierten Modul ist markiert als exportiert, es funktioniert: