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

Arrays, Tupel und Readonly in TypeScript vertieft

Arrays, Tupel und Readonly vertieft

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

Zum Abschluss von Phase 2 vertiefen wir Arrays und Tupel aus Kapitel 4 – inklusive readonly-Arrays, benannten Tupel-Elementen und optionalen Tupel-Positionen.

readonly Arrays: Schutz vor versehentlicher Veränderung

function zeigeGenres(genres: readonly string[]): void {
  console.log(genres.join(', '));
  genres.push('Neu'); // Fehler - push() verändert das Array, readonly verbietet das
}

const alleGenres: readonly string[] = ['Fantasy', 'Krimi'];
alleGenres[0] = 'Roman'; // Fehler - auch direkte Index-Zuweisung ist verboten

GENAU wie readonly bei Interface-Eigenschaften (Kapitel 7) verhindert readonly string[], dass das Array NACH der Übergabe verändert wird – nützlich als "Vertrag", wenn eine Funktion ein Array nur LESEN, aber niemals verändern soll.

Wichtiger Unterschied: readonly Array vs. const Array

const genres: string[] = ['Fantasy'];
genres.push('Krimi'); // ✓ ERLAUBT - const verhindert nur NEUZUWEISUNG der Variable,
                      // NICHT Veränderung des Array-INHALTS

genres = ['Roman'];   // ✗ Fehler - DAS verbietet const

Achtung: Ein häufiges Missverständnis: const macht ein Array NICHT unveränderlich – es verhindert nur, dass die VARIABLE selbst neu zugewiesen wird. push(), splice(), direkte Index-Zuweisung bleiben mit const ALLE erlaubt. Für WIRKLICHE Unveränderlichkeit brauchen Sie readonly, wie oben gezeigt.

Benannte Tupel-Elemente

type RegalPosition = [regal: string, fach: number, position: number];

function formatierePosition(pos: RegalPosition): string {
  const [regal, fach, position] = pos; // Destructuring wie gewohnt
  return `${regal}, Fach ${fach}, Position ${position}`;
}

Die Namen regal/fach/position in der Typdefinition sind reine DOKUMENTATION – sie ändern NICHTS am tatsächlichen Verhalten (das Tupel bleibt ein normales Array mit drei Elementen), verbessern aber die Lesbarkeit erheblich, besonders in der Autovervollständigung beim Hovern über den Typ.

Optionale Tupel-Elemente

type Suchfilter = [suchtext: string, genre?: string];

const filter1: Suchfilter = ['Tolkien'];
const filter2: Suchfilter = ['Tolkien', 'Fantasy'];
const filter3: Suchfilter = ['Tolkien', 'Fantasy', 'extra']; // Fehler - zu viele Elemente

Praxis: Bibliotheksdaten mit typisierten Arrays organisieren

src/data/beispielDaten.ts
import { Buch } from '../models/Buch.js';
import { Autor } from '../models/Autor.js';

export const tolkien: Autor = {
  name: 'J.R.R. Tolkien',
  geburtsjahr: 1892,
  nationalitaet: 'britisch',
};

export const orwell: Autor = {
  name: 'George Orwell',
  geburtsjahr: 1903,
  nationalitaet: 'britisch',
};

export const bibliotheksBestand: readonly Buch[] = [
  {
    isbn: '978-3-608-93830-2',
    titel: 'Der Herr der Ringe',
    autor: tolkien,
    erscheinungsjahr: 1954,
    seitenzahl: 1216,
    genres: ['Fantasy'],
    status: 'verfuegbar',
  },
  {
    isbn: '978-3-548-23410-6',
    titel: '1984',
    autor: orwell,
    erscheinungsjahr: 1949,
    seitenzahl: 328,
    genres: ['SachBuch', 'Roman'],
    status: 'ausgeliehen',
  },
];

bibliotheksBestand: readonly Buch[] – der GESAMTE Bibliotheksbestand ist bewusst als schreibgeschütztes Array modelliert. Das ist Absicht: Bücher HINZUFÜGEN oder ENTFERNEN soll später über dedizierte, kontrollierte Funktionen laufen (Kapitel 13, Klassen), nicht durch direkte Array-Manipulation von irgendwo im Code.

Tipp: Damit ist Phase 2 abgeschlossen: Interfaces, Type Aliases, Union/Intersection, Literal Types/Enums, und jetzt vertiefte Arrays/Tupel. Ab dem nächsten Kapitel wenden wir uns OBJEKTORIENTIERTER Programmierung zu – Klassen, die nicht nur Daten, sondern auch VERHALTEN bündeln.