2015-03-20 10 views
5

Mam dwie klasy zadeklarowane w dwóch osobnych plikach.Maszynopis. Jak wyeksportować dwie klasy (w oddzielnych plikach) w jednym module?

a.ts

export class AClass { 

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

} 

b.ts

export class BClass { 

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

} 

Chcę połączyć je w jednym module. Jak mogę to zrealizować?

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

module Common { 

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

} 

mówi:

nie można znaleźć nazwy 'AClass'.

i

nie można znaleźć nazwy 'BClass'.

mogę importować lekcje

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

module Common { 

} 

Ale jak mogę poprawnie je eksportować?

Nie można znaleźć żadnych informacji w dokumentacji. Proszę, powiedz mi, jak najlepiej realizować deklaracje w jednym module? Z góry dziękuję

+0

Ther jest różnica pomiędzy modułami wewnętrznymi i zewnętrznymi: https://www.youtube.com/watch?v=KDrWLMUY0R0&hd=1 – basarat

Odpowiedz

6

Jeśli zadeklarujesz klasę tak jak pokazałeś, umieść ją w globalnej przestrzeni nazw. Zadeklarować klasę wewnątrz modułu prostu zawinąć go w deklaracji modułu:

module Common{ 
    export class ClassA{} 
} 

można redeclare moduł w wielu plikach javascript tylko jeden obiekt zostanie utworzonych dla modułu.

+0

Ale jeśli moduł zawiera wiele klas - plik źródłowy będzie nieczytelny. Chcę rozdzielić klasy w kilku plikach – indapublic

+0

Tak jak napisałem tak, możesz. Maszynopis jest inteligentny w ten sposób, że nie stanowi problemu. Po prostu zapakuj każdy plik w deklarację modułu, a dostaniesz to, czego chcesz. – Rafal

+0

Może nie rozumiem poprawnie. Czy mogę utworzyć dwa pliki źródłowe z tym samym modułem, ale z oddzielną klasą? A jeśli potrzebuję tylko jednego pliku, muszę skompilować pliki do jednego .js? – indapublic

4

Masz export przed swoimi deklaracjami klasy:

export class AClass { 

to okazuje się, że plik źródłowy modułu zewnętrznego. Oznacza to, że trzeba będzie użyć import/require z innego modułu:

import a = require("a"); 

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

Zauważ, że AClass wydaje się być członkiem a ponieważ to właśnie importowane swój moduł zawierający jako.

Alternatywnie można zmienić nazwę modułu a po pojedynczej klasie, którą zawiera, np.

AClass.ts

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

export = AClass; 

Przez "przypisania" do export wykonujemy że klasa będzie cała pojedyncze wyjście modułu.W związku z tym w innym module:

import AClass = require("AClass"); 

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

Może to być trwalsze, jeśli moduł eksportuje tylko jedną klasę (lub funkcję).

+0

Hm. Może to jest offtopic, ale jeśli używam require, pojawia się błąd "Mismatched anonymous define() module: function (require, exports) { }". Nie można znaleźć powodu. – indapublic

+0

Skąd bierze się ten błąd? W kompilacji TS? Wygląda jak opakowanie AMD. –

+0

w konsoli przeglądarki, kompilacja powiodła się – indapublic

4

robię to tak:

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'; 

I wtedy zrobić: consumer.ts

import { A, B } from './m'; 
Powiązane problemy