2012-11-17 13 views

Antwort

9

Gute Beobachtung.

Dies ist eine Kompositionstechnik, bei der das gesamte importierte Modul wie ein externes Modul wirkt, das im umgebenden Modul erstellt wurde. Hier ein verkürztes Beispiel:

module MyModule { 
    export class MyClass { 
     doSomething() { 

     } 
    } 
} 

declare module EnclosingModule { 
    export import x = module(MyModule); 
} 

var y = new EnclosingModule.x.MyClass(); 

Das Schlüsselwort export macht ein Modul zu einem externen Modul. In diesem Fall macht es MyModule ein externes Modul des umschließenden Moduls, obwohl es nicht ursprünglich innerhalb des umschließenden Moduls definiert ist.

Warum?

Ich denke, das ist eine praktische Möglichkeit, Module wiederzuverwenden, statt sie in verschiedenen Kontexten zu wiederholen - und sie damit an mehr als einer Stelle zugänglich zu machen, wo es logisch erscheint.

+0

Ausgezeichnet, danke! –

+1

Es ist interessant, dass Abschnitt 9.2.2 der Spezifikation besagt, dass es nicht möglich ist, eine Modul-ID zu exportieren, die in einer Import-Deklaration deklariert wurde. Wenn ich meine Terminologie falsch verstehe, machen wir das nicht oben? – Crwth

+1

Es funktioniert nicht out-of-the-Box wie folgt - aber Sie können es in Definitionen verwenden. d.h. 'declare module SomeModule {export import stuff = Modul (" stuff "); } ' – Fenton

4

Ab 0.8.1.1 müssen Sie diese Syntax anscheinend verwenden, wenn Sie Klassen exportieren, die in anderen Modulen deklarierte Klassen erweitern.

Zum Beispiel in 0.8.1, könnte man sagen:

import mUiBase = module("../UiBase"); 

export class BaseViewModel extends mUiBase.UiBase { 
} 

Aber in 0.8.1.1, das gibt Ihnen eine Fehlermeldung „Exportierte Klasse erweitert Klasse von privaten Modul“, so dass Sie tun müssen, dies stattdessen:

Vermutlich ist das beabsichtigt, und nicht nur ein Fehler.

+1

Mein Verständnis von der Diskussion über CodePlex (Link in diesem Moment nicht finden ...) ist, dass dies ein Fehler ist, und Export-Import ist eine temporäre Problemumgehung. – JcFx

+0

Ich habe 0.8.1.1 verwendet ... Gerade auf 0.8.3 aktualisiert und alle meine "Export-Import" sind jetzt Fehler (kann den Export einfach entfernen). Also hatte JcFx Recht damit, dass es ein Bug war. Seltsam, dass Steve einen wirklichen Nutzen dafür beschrieben hat, was damit jetzt? – parliament