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

Vererbung in TypeScript

Vererbung

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

Unsere Bibliothek soll neben normalen Büchern auch HÖRBÜCHER verwalten – mit fast denselben Eigenschaften, aber einer zusätzlichen Spiellänge statt Seitenzahl. Vererbung vermeidet, gemeinsamen Code zu duplizieren.

Eine gemeinsame Basisklasse: Medium

src/models/Medium.ts
import { Autor } from './Autor.js';
import { Genre } from './Genre.js';
import { BuchStatus } from './Buch.js';

export class Medium {
  constructor(
    public readonly isbn: string,
    public titel: string,
    public autor: Autor,
    public erscheinungsjahr: number,
    public genres: Genre[],
    public status: BuchStatus,
  ) {}

  beschreibung(): string {
    return `${this.titel} von ${this.autor.name} (${this.erscheinungsjahr})`;
  }
}

Medium nutzt Constructor Property Promotion aus Kapitel 12 für ALLE gemeinsamen Eigenschaften – bewusst als KLASSE statt Interface, weil wir hier bereits VERHALTEN (beschreibung()) mit den Daten bündeln wollen, das ALLE abgeleiteten Typen teilen.

Buch und Hoerbuch als abgeleitete Klassen

src/models/Buch.ts
import { Medium } from './Medium.js';
import { Autor } from './Autor.js';
import { Genre } from './Genre.js';

export type BuchStatus = 'verfuegbar' | 'ausgeliehen' | 'reserviert';

export class Buch extends Medium {
  constructor(
    isbn: string,
    titel: string,
    autor: Autor,
    erscheinungsjahr: number,
    genres: Genre[],
    status: BuchStatus,
    public seitenzahl: number,
  ) {
    super(isbn, titel, autor, erscheinungsjahr, genres, status);
  }
}
src/models/Hoerbuch.ts
import { Medium } from './Medium.js';
import { Autor } from './Autor.js';
import { Genre } from './Genre.js';
import { BuchStatus } from './Buch.js';

export class Hoerbuch extends Medium {
  constructor(
    isbn: string,
    titel: string,
    autor: Autor,
    erscheinungsjahr: number,
    genres: Genre[],
    status: BuchStatus,
    public spiellaengeMinuten: number,
    public sprecher: string,
  ) {
    super(isbn, titel, autor, erscheinungsjahr, genres, status);
  }

  // überschreibt die geerbte Methode mit einer erweiterten Version
  override beschreibung(): string {
    return `${super.beschreibung()}, gelesen von ${this.sprecher}`;
  }
}

extends, super und override im Detail

  • extends MediumBuch/Hoerbuch ERBEN ALLE Eigenschaften und Methoden von Medium, ohne sie neu zu schreiben.
  • super(...) – MUSS als ERSTE Anweisung im Constructor einer abgeleiteten Klasse aufgerufen werden, ruft den Constructor der BASISKLASSE auf, um die geerbten Eigenschaften zu initialisieren.
  • override beschreibung() – ERSETZT die geerbte Methode durch eine eigene Implementierung. Das override-Schlüsselwort ist eine ausdrückliche ABSICHTSERKLÄRUNG: "ich überschreibe bewusst eine geerbte Methode" – TypeScript zeigt einen Fehler, wenn Medium GAR KEINE Methode namens beschreibung hätte (Tippfehler-Schutz).
  • super.beschreibung() – ruft die URSPRÜNGLICHE, geerbte Version der Methode auf, bevor Hoerbuch eigenen Text ANHÄNGT – Wiederverwendung statt Duplikation.

Polymorphie: verschiedene Medien einheitlich behandeln

const medien: Medium[] = [
  new Buch('123', 'Der Hobbit', tolkien, 1937, ['Fantasy'], 'verfuegbar', 310),
  new Hoerbuch('456', 'Der Hobbit', tolkien, 1937, ['Fantasy'], 'verfuegbar', 620, 'Achim Höppner'),
];

medien.forEach((medium) => console.log(medium.beschreibung()));
// Buch nutzt die GEERBTE beschreibung(), Hoerbuch die ÜBERSCHRIEBENE -
// derselbe Aufruf, unterschiedliches Verhalten, je nach TATSÄCHLICHEM Typ

medien: Medium[] kann BEIDE Typen aufnehmen, weil Buch UND Hoerbuch beide Medium SIND ("is-a"-Beziehung) – GENAU das ist "Polymorphie": derselbe Methodenaufruf (beschreibung()) verhält sich je nach tatsächlichem Objekttyp unterschiedlich, ohne dass der aufrufende Code das selbst prüfen müsste.

Achtung: Vererbung ist mächtig, aber leicht ÜBERZUSTRAPAZIEREN – tiefe Vererbungshierarchien (A extends B extends C extends D) werden schnell unübersichtlich. Als Faustregel: Vererbung nur für ECHTE "ist ein"-Beziehungen (ein Hörbuch IST ein Medium), NICHT für reine Code-Wiederverwendung ohne konzeptionelle Beziehung – dafür gibt es andere Muster (Komposition), außerhalb des Rahmens dieses Kapitels.