在打字稿中,是否可以使用属性装饰器为该类设置元数据?考虑下面的代码。类装饰器的“目标”显然与属性装饰器的“目标”不同。我可以从另一个派生出一个吗?可以打字稿属性装饰者设置类的元数据?
import 'reflect-metadata';
const MY_CLASS_DECORATOR_KEY = 'MyClassDecoratorKey';
const MY_PROPERTY_DECORATOR_KEY = 'MyPropertyDecoratorKey';
export const MyClassDecorator = options => {
return function (target) {
console.log('class target: ' , target);
Reflect.defineMetadata(MY_CLASS_DECORATOR_KEY, options, target);
};
};
export const MyPropertyDecorator = (options): PropertyDecorator => {
return (target, property) => {
console.log('property target: ' , target);
const metadata = Reflect.getMetadata(MY_PROPERTY_DECORATOR_KEY, target) || {};
metadata[property] = options;
Reflect.defineMetadata(MY_PROPERTY_DECORATOR_KEY, metadata, target);
};
};
@MyClassDecorator('my class decorator value')
class MyClass {
@MyPropertyDecorator('first my property decorator value')
myFirstProperty: any;
@MyPropertyDecorator('second my property decorator value')
mySecondProperty: any;
}
console.log('keys: ', Reflect.getMetadataKeys(MyClass));
注输出:
property target: MyClass {}
property target: MyClass {}
class target: function MyClass() {
}
keys: [ 'MyClassDecoratorKey' ]
我怎样才能获得元数据键也显示从属性装饰钥匙?
哦,太棒了。你的回答正是我所需要的。非常感谢!但是,假设我想要朝另一个方向前进,并将元数据放在原型而不是构造函数上?我可以走向另一个方向吗? – bkinsey808
当然,只要做target.prototype – dtabuenc