2016-09-21 8 views
3

こんにちは、デコレータjavascript/typescriptを与えたすべてのクラスを取得できるかどうか疑問に思っています。@decoratorsですべてのクラス/コンストラクタを取得する

私は、ランタイム内の他のモジュールでは、私はデコレータ@mydecoratorを持っているすべてのクラスまたはコンストラクタを取得したいと思い例

@mydecorator 
class SomeClass1{ 
} 

とモジュール

@mydecorator 
class SomeClass2{ 
} 

で他のsomewereのためのクラスを持っています.. 。私はこれが不可能であることを怖い:(

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

内のすべての登録済みのクラスを得ることができますか? – Bergi

+0

私はクラスをグローバルに登録する方法と作成する方法をエレガントにする方法を模索していました。依存パターンのようなもの。 –

+0

ES6モジュールシステムはすでにそれを提供していませんか? – Bergi

答えて

1

@mydecoratorを使用するすべてのクラスをどこかに登録する必要があります。このレジスタのロジックは@mydecoratorで実装する必要があります。たとえば:

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

@mydecorator() 
class SomeClass1{ 
} 

@mydecorator() 
class SomeClass2{ 
} 

今、あなたはあなたがそれらを正確に何が必要ですかregisteredClasses配列

+0

このアプローチは、私が探しているものです...もしそれがうまくいくなら...あなたは私の一日を作った!明日私はそれをチェックするつもりです:-) thx –

+0

その作業:-) thx –

+0

githubの私のレポを見てもっと複雑な例がありますどのようにデコレータを使用する – pleerock

0

あなたはそれを行うことはできません"自動的に"、しかしあなたは前記のクラスでレジストリを作成することができます。
は、その後、あなたのデコレータ関数内あなたはこれらのクラスを追加します。

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

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

次にあなたがこのREGISTRYを照会し、このデコレータを使用するかを知ることができます。

+0

私はそれが好き..... –

関連する問題