typescript에서 속성 데코레이터를 사용하여 클래스의 메타 데이터를 설정할 수 있습니까? 아래의 코드를 고려하십시오. 클래스 데코레이터의 "target"은 속성 데코레이터의 "target"과 분명히 같지 않습니다. 다른 하나에서 파생 될 수 있습니까?는 속성 장식자가 해당 클래스의 메타 데이터를 typescript 할 수 있습니까?
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