2015-03-20 12 views
5

Ich habe zwei Klassen in zwei separaten Dateien deklariert.Typoskript. Wie exportiert man zwei Klassen (in separaten Dateien) in einem Modul?

a.ts

export class AClass { 

    public constructor() { 
    console.log('AClass'); 
    } 

} 

b.ts

export class BClass { 

    public constructor() { 
    console.log('BClass'); 
    } 

} 

ich sie in einem Modul zusammenführen möchten. Wie kann ich es realisieren?

///<reference path='a.ts' /> 
///<reference path='b.ts' /> 

module Common { 

    export class A extends AClass {} 
    export class B extends BClass {} 

} 

sagt:

nicht name 'AClass' gefunden.

und

Kann nicht Namen 'B-Klasse' gefunden.

Ich kann Klassen importieren

import AClass = require('a'); 
import BClass = require('b'); 

module Common { 

} 

Aber wie ich sie richtig exportieren?

Kann keine Informationen in der Dokumentation finden. Bitte sagen Sie mir die beste Möglichkeit, Deklarationen in einem Modul zu realisieren. Vielen Dank im Voraus

+0

Ther ist ein Unterschied zwischen internen und externen Modulen: https://www.youtube.com/watch?v=KDrWLMUY0R0&hd=1 – basarat

Antwort

6

Wenn Sie Klasse erklären, wie Sie zeigen Sie es im ‚globalen‘ Namespace enthalten. Zu erklären Klasse innerhalb eines Moduls wickeln Sie es nur in Moduldeklaration:

module Common{ 
    export class ClassA{} 
} 

können Sie Modul in mehrere Dateien neu deklarieren nur ein JavaScript-Objekt wird für das Modul erstellt werden.

+0

Aber Wenn das Modul viele Klassen enthält, ist die Quelldatei nicht lesbar. Ich möchte Klassen in mehreren Dateien trennen – indapublic

+0

Wie ich ja geschrieben habe, können Sie. Typoskript ist schlau, so ist es kein Problem. Wickeln Sie einfach jede Datei in die Moduldeklaration und Sie erhalten, was Sie wollen. – Rafal

+0

Vielleicht verstehe ich nicht richtig. Also, kann ich zwei Quelldateien mit demselben Modul aber separate Klasse machen? Und wenn ich nur eine Datei brauche, muss ich Dateien in ein .js kompilieren? – indapublic

4

Sie haben export vor Ihrer Klassendeklarationen:

export class AClass { 

Damit wird die Quelldatei in einem externen Modul. Dies bedeutet, dass Sie import/require von einem anderen Modul zu verwenden, benötigen Sie:

import a = require("a"); 

module Common { 
    export class A extends a.AClass {} 
} 

Beachten Sie, dass AClass Mitglied a zu sein scheint, denn das ist, was ich die darin enthaltenen Modul importiert, wie.

Alternativ können Sie a Modul nach einer einzigen Klasse umbenennen, die es enthält, z.B.

AClass.ts

class AClass { 
    public constructor() { 
    console.log('AClass'); 
    }  
} 

export = AClass; 

Mit "Zuweisung" zu export machen wir diese Klasse die gesamte einzelne Ausgabe des Moduls sein.Daher wird in einem weiteren Modul:

import AClass = require("AClass"); 

var a = new AClass(); // no prefix needed 

Dies kann aufgeräumter sein, wenn Ihr Modul nur eine einzige Klasse (oder Funktion) exportiert.

+0

Hm. Vielleicht ist es offtopic, aber wenn ich benutze, erhalte ich Fehler "Mismatched anonymous define() Modul: Funktion (require, Exporte) { }". Kann keinen Grund finden – indapublic

+0

Woher bekommen Sie diesen Fehler? In TS Zusammenstellung? Es sieht wie ein AMD Wrapper aus. –

+0

in Browser-Konsole Kompilation erfolgreich war – indapublic

4

Ich mache es wie folgt aus:

m/a.ts

export class A { 
} 

m/b.ts

export class B { 
} 

m/index.ts

export { A } from './a.ts'; 
export { B } from './b.ts'; 

Und dann tue ich: consumer.ts

import { A, B } from './m'; 
Verwandte Themen