В машинописных текстах можно ли использовать декоратор свойств для установки метаданных для класса? Рассмотрим приведенный ниже код. «Цель» декоратора класса, по-видимому, не совпадает с «мишенью» декоратора свойств. Могу ли я получить один от другого?Может ли дескриптор свойств машинописного текста установить метаданные для класса?
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