Magento 2 Experten — Hyvä Theme, Tailwind CSS & SEO aus einer Hand ›

Statische Member, Getter und Setter in TypeScript

Statische Member, Getter und Setter

~14 Min. Lesezeit Zuletzt aktualisiert am 8. August 2026

Zum Abschluss von Phase 3 (Objektorientierte Programmierung): zwei Werkzeuge, die INSTANZ-unabhängige Funktionalität (static) bzw. kontrollierten Eigenschaftszugriff mit normaler Punkt-Syntax (get/set) ermöglichen.

Statische Member: gehören zur Klasse, nicht zur Instanz

export class Bibliothek {
  private static naechsteId = 1; // gehört zur KLASSE, nicht zu einer einzelnen Bibliothek
  public readonly id: number;
  private bestand: Buch[];

  constructor(startBestand: Buch[]) {
    this.id = Bibliothek.naechsteId++; // Zugriff über den Klassennamen, nicht 'this'
    this.bestand = startBestand;
  }
}

const a = new Bibliothek([]);
const b = new Bibliothek([]);
console.log(a.id, b.id); // 1, 2 - jede Instanz bekommt eine EINDEUTIGE, fortlaufende ID

static naechsteId existiert GENAU EINMAL, geteilt von ALLEN Instanzen von Bibliothek – anders als bestand, das JEDE Instanz für sich hat. Zugriff erfolgt über Bibliothek.naechsteId (Klassenname), NICHT this.naechsteId.

Statische Methoden: Utility-Funktionen an die Klasse gebunden

export class Buch {
  // ... bestehende Eigenschaften

  static istGueltigeIsbn(isbn: string): boolean {
    const bereinigt = isbn.replace(/-/g, '');
    return bereinigt.length === 13 && /^\d+$/.test(bereinigt);
  }
}

Buch.istGueltigeIsbn('978-3-608-93830-2'); // true - AUFRUF über Klassennamen, keine Instanz nötig

static istGueltigeIsbn(...) braucht KEINE Buch-Instanz, um aufgerufen zu werden – sinnvoll für Hilfsfunktionen, die logisch zu einer Klasse GEHÖREN (ISBN-Validierung ist ein "Buch"-Konzept), aber keinen Zugriff auf this brauchen.

Getter und Setter: berechnete Eigenschaften mit Punkt-Syntax

export class Buch extends Medium {
  private _seitenzahl: number;

  constructor(/* ... */ seitenzahl: number) {
    super(/* ... */);
    this._seitenzahl = seitenzahl;
  }

  get seitenzahl(): number {
    return this._seitenzahl;
  }

  set seitenzahl(wert: number) {
    if (wert <= 0) {
      throw new Error('Seitenzahl muss positiv sein.');
    }
    this._seitenzahl = wert;
  }

  get lesezeitMinuten(): number {
    return Math.round(this._seitenzahl * 1.5); // BERECHNETER Wert, keine echte Eigenschaft
  }
}

const buch = new Buch(/* ... */ 300);
console.log(buch.seitenzahl);      // 300 - liest wie eine normale Eigenschaft, ruft aber den GETTER auf
buch.seitenzahl = 350;             // schreibt wie eine normale Eigenschaft, ruft den SETTER auf
buch.seitenzahl = -10;             // wirft den Error aus dem Setter
console.log(buch.lesezeitMinuten); // 450 - NUR ein Getter, kein passender Setter -> read-only

Von AUSSEN sieht buch.seitenzahl aus wie eine GEWÖHNLICHE Eigenschaft (keine Klammern wie bei einem Methodenaufruf!) – INTERN läuft aber bei jedem Lesen/Schreiben Ihr eigener Code. Der führende Unterstrich _seitenzahl ist reine NAMENSKONVENTION (nicht TypeScript-spezifisch), um die "echte", private Datenspeicherung vom öffentlichen Getter/Setter-Paar zu unterscheiden.

Nur ein Getter: automatisch schreibgeschützt

lesezeitMinuten hat NUR einen get, KEINEN set – der Versuch buch.lesezeitMinuten = 100 würde einen Kompilierzeit-Fehler auslösen. Das ist ein ELEGANTERES Äquivalent zu readonly aus Kapitel 7/11 für Werte, die BERECHNET statt gespeichert werden.

Achtung: Getter/Setter fühlen sich "magisch" an, aber Vorsicht vor ÜBERMÄSSIGER Logik darin – ein Getter, der aufwendige Berechnungen oder gar Netzwerk-Aufrufe macht, überrascht Aufrufer, die buch.seitenzahl für eine simple, billige Eigenschaftslesung halten. Faustregel: Getter/Setter für EINFACHE Validierung und leichte Berechnung, echte asynchrone/teure Operationen gehören in explizit benannte Methoden.

Tipp: Damit ist Phase 3 (OOP) abgeschlossen – Klassen, Vererbung, Zugriffsmodifizierer, abstrakte Klassen, statische Member, Getter/Setter. Phase 4 wendet sich den WIRKLICH fortgeschrittenen TypeScript-Features zu, beginnend mit Generics – dem Werkzeug, das unsere bisher etwas repetitive Bibliothek-Klasse WIEDERVERWENDBAR für JEDEN Medientyp macht, nicht nur Bücher.