私がコメントに書いたように、インタフェースはコンパイルされたjの一部ではなく、単に出力から出力するコンパイラによって使用されます。
デコレータは実行時に実行されているため、デコレートするインタフェースに関する情報はありません。
class MyClass {
@MyDeco
myMember: MyType;
}
行うのと同等です:
class MyClass {
@MyDeco
@Reflect.metadata("design:type", MyType)
myMember: MyType;
}
あなたが@Reflect.metadata
一部を自分が含まれていない場合ので、どちらが、彼らはこれを行うことはことを示してDecorators docs (Metadata section)で最後の例では
コンパイラがそれを追加します。
しかしMyType
インターフェイスがあるときにコンパイラがObject
でそれを代用しますので、この:
interface MyInterfaceType {}
class MyClassType {}
class MyClass {
@MyDeco
member1: MyClassType;
@MyDeco
member2: MyInterfaceType;
}
をするようにコンパイルされている:
var MyClass = (function() {
function MyClass() {
}
__decorate([
MyDeco,
__metadata('design:type', MyClassType)
], MyClass.prototype, "member1", void 0);
__decorate([
MyDeco,
__metadata('design:type', Object)
], MyClass.prototype, "member2", void 0);
return MyClass;
}());
はあなたがインターフェイスを使用し続けるとしたい場合は、その名前を受け取るデコレータのオプションのパラメータを持つことをお勧めします。次に、このデコレータをインターフェイスに使用するときに名前を置くだけです。
私はそれがちょっとポイントを逃していることを知っていますが、あなたは実際には(私はそれを見て)より多くのオプションを持っていない。
インタフェースは実行時に存在しません。そのデコレータをクラスとインターフェイスの両方で使用する場所で、コードの一部を追加できますか? –
@NitzanTomer私はそれを – Pooya