Getter und Setter in TypeScript: Komplette Anleitung mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Get und Set in TypeScript: Die Magie der Accessoren ohne Schmerz

\n\n

Hast du jemals eine Klasse in TypeScript geschrieben und gedacht: "Ich wünschte, ich könnte eine Eigenschaft intelligent machen, sodass sie beim Lesen etwas berechnet und beim Schreiben die Daten überprüft"? Dann lerne Getter (get) und Setter (set) kennen. Sie sind nicht nur syntaktischer Zucker, sondern ein mächtiges Werkzeug zur Kontrolle des Datenzugriffs.

\n\n

Wenn du dieses Thema bereits auf Stack Overflow gesehen hast, weißt du: Die Frage "get and set in TypeScript" sammelt tausende Aufrufe. Viele sind verwirrt, wann man Accessoren und wann normale Methoden verwendet. In diesem Artikel bringen wir Ordnung ins Chaos – von den Grundlagen bis zu kniffligen Details.

\n\n

Bereit? Los geht's!

\n\n

Was sind get und set in TypeScript?

\n\n

Ein Getter ist eine Methode, die beim Lesen einer Eigenschaft aufgerufen wird. Ein Setter ist eine Methode, die beim Zuweisen eines Werts aufgerufen wird. Zusammen bilden sie Accessoren. Es sieht so aus, als würdest du mit einem normalen Feld arbeiten, aber unter der Haube steckt Logik.

\n\n

Hier ist ein minimales Beispiel:

\n\n
class User {\n  private _name: string = '';\n\n  get name(): string {\n    return this._name;\n  }\n\n  set name(value: string) {\n    if (value.length > 0) {\n      this._name = value;\n    } else {\n      console.log('Der Name darf nicht leer sein');\n    }\n  }\n}\n\nconst user = new User();\nuser.name = 'Anna'; // setter wird aufgerufen\nconsole.log(user.name); // getter wird aufgerufen → 'Anna'\nuser.name = ''; // Versuch, einen leeren Namen zu setzen → Konsolenausgabe
\n\n

Beachte: Die Eigenschaft _name mit dem Präfix _ ist ein privates Feld. Ein direkter Zugriff von außen ist nicht möglich. Stattdessen verwenden wir den öffentlichen Accessor name.

\n\n

Wozu braucht man Getter und Setter? 3 Hauptgründe

\n\n

1. Datenvalidierung

\n

Der Setter ist der ideale Ort, um Eingabewerte zu überprüfen. Du kannst ungültige Daten abfangen, bevor sie in das Objekt gelangen.

\n\n
class Temperature {\n  private _celsius: number = 0;\n\n  get celsius(): number {\n    return this._celsius;\n  }\n\n  set celsius(value: number) {\n    if (value < -273.15) {\n      throw new Error('Temperatur unter dem absoluten Nullpunkt nicht möglich');\n    }\n    this._celsius = value;\n  }\n}
\n\n

2. Berechnete Eigenschaften

\n

Ein Getter kann nicht nur einen gespeicherten Wert zurückgeben, sondern das Ergebnis von Berechnungen auf Basis anderer Daten.

\n\n
class Rectangle {\n  constructor(public width: number, public height: number) {}\n\n  get area(): number {\n    return this.width * this.height;\n  }\n\n  get perimeter(): number {\n    return 2 * (this.width + this.height);\n  }\n}\n\nconst rect = new Rectangle(10, 5);\nconsole.log(rect.area); // 50 — wird dynamisch berechnet
\n\n

3. Kapselung und Zugriffskontrolle

\n

Du kannst eine Eigenschaft schreibgeschützt (nur Getter) oder nur beschreibbar (nur Setter) machen. Das hilft, die OOP-Prinzipien einzuhalten.

\n\n
class Config {\n  private _apiKey: string = 'secret123';\n\n  get apiKey(): string {\n    // Hier könnte man Logging oder Berechtigungsprüfungen einfügen\n    return this._apiKey;\n  }\n  // Kein Setter definiert – Eigenschaft ist schreibgeschützt\n}\n\nconst config = new Config();\nconsole.log(config.apiKey); // 'secret123'\n// config.apiKey = 'newKey'; // Kompilierungsfehler!
\n\n

Häufige Fragen zu get und set in TypeScript

\n\n

Lass uns die Fragen durchgehen, die Anfänger (und nicht nur sie) am häufigsten auf Stack Overflow und in Foren stellen.

\n\n

Frage 1: Wie unterscheiden sich get/set von normalen Methoden?

\n

Der Hauptunterschied ist die Syntax beim Aufruf. Accessoren sehen aus wie Eigenschaften: ohne runde Klammern. Das macht den Code sauberer und intuitiver. Vergleiche:

\n\n
// Mit Methoden\nuser.getName();\nuser.setName('Peter');\n\n// Mit Accessoren\nuser.name;\nuser.name = 'Peter';
\n\n

Ein zweiter Unterschied: Accessoren können nicht überladen (overload) werden. Jeder Accessor hat nur eine Signatur.

Blogs

Buchempfehlungen