Tipcript'te, sınıf için meta verileri ayarlamak üzere bir özellik dekoratörünün kullanılması mümkün müdür? Aşağıdaki kodu dikkate alın. Sınıf dekoratörünün "hedefi", görünüşte, özellik dekoratörünün "hedefi" ile aynı değildir. Birini diğerinden çıkarabilir miyim?typescript özellikli dekoratörler sınıf için meta veriler ayarlayabilir mi?
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));
Not çıkışı:
property target: MyClass {}
property target: MyClass {}
class target: function MyClass() {
}
keys: [ 'MyClassDecoratorKey' ]
nasıl da mülkiyet dekoratör anahtarları göstermek için meta veri anahtarlarını alabilirim?
Ah'in kullanılmamasını belirlemek için ek bir mantık eklemeniz gerekir. Cevabınız tam ihtiyacım olan şey. Çok teşekkürler! Ama sanırım diğer yöne gitmek ve meta vereni yapıcı yerine prototip üzerine koymak istedim? Diğer yöne gidebilir miyim? – bkinsey808
Elbette, sadece target.prototype yapın – dtabuenc