Da dies noch nicht erwähnt wurde, können Sie, wenn Sie Typescript verwenden, bei der Verwendung von Dekoratoren Metadaten ausgeben, die es Ihnen ermöglichen, die Parametertypen zu erhalten.
Metadaten werden nur ausgegeben, wenn die Klasse/Funktion/Prop einen Dekorator hat.
Es spielt keine Rolle, welcher Dekorateur.
Diese Funktion kann aktiviert werden durch die Einstellung emitDecoratorMetadata in tsconfig.json auf true setzen
{
"compilerOptions": {
"emitDecoratorMetadata": true
}
}
Da sich die Metadaten noch in einem frühen Vorschlag die reflect-Metadaten muss installiert sein, sonst wird Reflect.getMetadata nicht definiert.
npm install reflect-metadata
Sie können es wie folgt verwenden:
const AnyDecorator = () : MethodDecorator => {
return target => { }
}
class Person{
@AnyDecorator()
sayHello(other: Person){}
}
const instance = new Person();
// This returns: Function
const funcType = Reflect.getMetadata('design:type', instance.sayHello);
// Returns an array of types, here it would be: [Person]
const funcParams = Reflect.getMetadata('design:paramtypes', instance.sayHello);
In neueren Versionen von Angular wird dies zum Beispiel verwendet, um zu bestimmen, was injiziert werden soll -> https://stackoverflow.com/a/53041387/1087372