In Typoskript ist es möglich, einen Property Decorator zu verwenden, um Metadaten für die Klasse festzulegen? Betrachten Sie den folgenden Code. Das "Ziel" des Klassendekorators ist offensichtlich nicht das gleiche wie das "Ziel" des Eigenschaftsdekorators. Kann ich eines von dem anderen ableiten?kann Typoskript-Eigenschaft Dekoratoren setzen Metadaten für die Klasse?
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));
Beachten Sie die Ausgabe:
property target: MyClass {}
property target: MyClass {}
class target: function MyClass() {
}
keys: [ 'MyClassDecoratorKey' ]
Wie kann ich die Metadaten Schlüssel erhalten auch Schlüssel aus dem Eigentum Dekorateur zeigen?
Oh fantastisch zu verwenden ist. Ihre Antwort ist genau das, was ich brauchte. Vielen Dank! Aber angenommen, ich wollte in die andere Richtung gehen und die Metadaten anstelle des Konstruktors auf den Prototyp setzen? Kann ich die andere Richtung gehen? – bkinsey808
Sicher, tun Sie einfach target.prototype – dtabuenc