2016-09-21 1 views
3

Hallo all das bin ich frage mich, ob das möglich ist, erhalten alle Klassen, die Dekorateur Javascript/Typoskript gegeben haben.Holen Sie sich alle Klassen/Konstruktoren von gegebenen @decorators

Ich habe Klasse zum Beispiel

@mydecorator 
class SomeClass1{ 
} 

und somewere sonst in Modul

@mydecorator 
class SomeClass2{ 
} 

dann in anderen Modul im laufenden Betrieb würde Ich mag alle Klassen oder Konstrukteure erhalten, die Dekorateur @mydecorator haben .. . ich fürchte, dass dies :(

export function getaAllClassesByDecorator(decorator:string){ 
... return constructor or something that i am able to call static method 
} 
+0

Was genau müssen Sie sie noch? – Bergi

+0

Ich war auf der Suche nach einem eleganten Weg, wie Klasse global zu registrieren und dann zu erstellen. So etwas wie ein Abhängigkeitsmuster. –

+0

Gibt Ihnen das ES6-Modulsystem das nicht schon? – Bergi

Antwort

1

Sie müssen alle Klassen, die @mydecorator verwenden, "registrieren". Diese Registerlogik sollte in @mydecorator implementiert werden. Zum Beispiel:

export const registeredClasses = []; 
export function mydecorator() { 
    return function(target: Function) { 
      registeredClasses.push(target); 
    }; 
} 

@mydecorator() 
class SomeClass1{ 
} 

@mydecorator() 
class SomeClass2{ 
} 

Jetzt können Sie alle registrierten Klassen in den registeredClasses bekommen Array

+0

Dieser Ansatz ist, was ich suche ... wenn das funktioniert ... du hast meinen Tag gemacht! Morgen werde ich es überprüfen :-) thx –

+0

seine Arbeit :-) thx –

+0

werfen Sie einen Blick auf meine Repos auf GitHub gibt es komplexere Beispiele, wie Dekoratoren zu verwenden – pleerock

0

nicht möglich ist, tun Sie können nicht, dass "automatisch", aber Sie können eine Registrierung mit diesen Klassen erstellen.
Dann in Ihrer Dekorateur Funktion fügen Sie diese Klassen:

const REGISTRY: { [name: string]: any } = {}; 

function mydecorator(constructor) { 
    REGISTRY[constructor.name] = constructor; 
} 

Dann können Sie diese REGISTRY abfragen und wissen, wer diesen Dekorateur verwendet.

+0

Ich mag es ..... –

Verwandte Themen