Ja, aber es ist nicht sehr praktisch. Sie können den Decorator für die Eigenschaften eines Objekts aufrufen, jedoch nicht auf die gleiche Weise, wie Sie eine Klasse und deren Inhalt dekorieren würden.
Angesichts der folgende Dekorateur:
const TestDecorator = (at: string) => {
return function (target: any, prop: string, descriptor?: PropertyDescriptor) {
console.log(`decorated at ${at}}`);
}
}
würde verwendet werden, wie es in einer Klasse gefolgt:
class TestClass {
@TestDecorator('class method')
public testMethod() { }
}
Es kann jedoch nicht die gleiche Art und Weise für eine Eigenschaft, wie oben angewandt werden:
Um dies zu umgehen, können Sie den Dekorateur in der Eigenschaft aufrufen.
Zuerst müssen Sie Ihr Objekt mit all seinen Eigenschaften erklären:
const testObj = {
testMethod:() => { }
};
Mein Dekorateur erwartet einen curried Wert:
const deco = TestDecorator('property method');
Jetzt müssen Sie manuell die deco
Dekorateur für die Eigenschaft aufrufen in :
deco(testObj, 'testMethod');
Wenn Sie müssen die propertyDescriptor
in Ihrem Dekorateur (nicht im OP ist), werden Sie müssen es manuell bieten auch:
deco(testObj, 'testMethod', Object.getOwnPropertyDescriptor(testObj, 'testMethod'));
hier ein TS playground ist. Überprüfen Sie die Ausgabe in der Konsole.
Auf welche Dekorateure beziehen Sie sich? Die Vorschläge? –
Was ist eine abstrakte Klasse? Dies sieht nicht wie JavaScript aus. – Bergi
@Bergi Sorry, ich arbeite gerade viel mit Typoskript. Ich habe die Zusammenfassung entfernt – Chris