2017-05-02 8 views
2

のためのオブジェクトを照会メタデータを反映します@globalVariableデコレータで装飾されたクラスのすべてのプロパティを取得します。は、私は単に何もしないデコレータを持っており、デコレータ

私は "を反映-メタデータ" を使ってみました:

Reflect.getMetadata('globalVariable', this); 

が、私が得るすべては "未定義" です。メタデータを反映することでこれが可能ですか、これを完全に間違っていますか?

答えて

1

プロパティデコレータは、クラスが定義されているときにクラス内のプロパティ定義ごとに1回呼び出されます。

これは、あなたが@myDecoratorで工assのプロパティを飾る場合ことを意味します

export class SomeClass { 
    @myDecorator 
    someProperty: string; 
} 

を次にmyDecorator機能を使って呼び出されます:
ターゲット:(工ass定義)キー
:(名

"emitDecoratorMetadata"プロパティでメタデータを有効にすると、TypeScriptコンパイラは次のメタデータプロパティを生成します。

'design:type','design:paramtypes'および​​。

これで、上記のいずれかのキーでReflect.getMetadataを呼び出すことができます。すなわち:

Reflect.getMetadata('design:type', ...) 
Reflect.getMetadata('design:paramtypes',...) 
Reflect.getMetadata('design:returntype', ...) 

Reflect.getMetadataをデコレータの名前で呼び出すことはできません。

+0

ありがとうございました。クラスのすべての装飾されたプロパティを列挙するとどうなりますか? –

+0

私はこの情報を保存するためにあなた自身のデコレータを作成する必要があると信じています。プロパティデコレータは、単に装飾されたプロパティごとに呼び出される関数であることに注意してください。この情報を保存しておけば、後でそれを取得することができます... – blorkfish

+0

@ blorkfishさんの最後のコメントはいったことがありますか?それはまさに私が必要としているものです。 –

関連する問題