© best_vector/Shutterstock.com
Teil 6: TypeScript - Decorators

Klassen und Mitglieder dekorieren


Mit Decorators lassen sich in JavaScript und in TypeScript Klassen und deren Mitglieder dekorieren. Die Funktionalität der Decorators ist vergleichbar mit Attributen in C# oder Annotationen in Java. Decorators sind allerdings noch nicht Teil eines finalisierten JavaScript-Standards, sondern Vorschläge, und befinden sich noch in einem sogenannten „Proposal State“. Dennoch lassen sich Decorators in TypeScript bereits verwenden, und Googles Angular macht sogar sehr intensiven Gebrauch von Decorators. Dieser Artikel gibt einen Einblick in ihre Funktionsweise.

Mit der Einführung von Klassen in ES6 und so auch in TypeScript besteht für manche Szenarien der Bedarf, Klassen selbst oder deren Mitglieder, wie Properties oder Methoden, mit Metadaten auszustatten. Diese Funktionalität besitzt bspw. die Sprache C# mit Attributen, oder die Sprache Java mit Annotationen. In JavaScript und in TypeScript wird das Ganze als Decorator bezeichnet.

Wie erwähnt, befinden sich Decorators noch in einem „Proposal State“ für einen zukünftigen JavaScript-Standard. Sie stehen in TypeScript experimentell zur Verfügung, könnten sich aber theoretisch mit der finalen und dann standardisierten Version nochmals ändern.

Dieser Artikel vermittelt die Grundlagen zu Decorators in TypeScript.

Ein Klassen-Decorator

In TypeScript lassen sich Decorators für folgende Ziele entwickeln:

  • Klasse

  • Property

  • Accessor

  • Methode

  • Parameter

Ein Decorator startet beim Verwenden in TypeScript immer mit einem @-Zeichen. Folgender Code zeigt eine leere Friend-Klasse mit einem Component Decorator:

@Component class Friend{ }

Beim Decorator selbst handelt es sich um eine Expression, die sich zu einer Funktion auflösen muss, die wiederum eine ganz bestimmte Signatur hat. Die benötigte Signatur der aufgelösten Funktion hängt davon ab, wo der Decorator eingesetzt wird. Bspw. muss ein Decorator für eine Property zu einer Funktion auflösen, die zwei Parameter hat. Der erste Parameter vom Typ object für das Zielobjekt, der zweite ...

Neugierig geworden?

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang