🛡️ TypeScript Advanced & Generics

TS 15: Fortgeschrittenes TypeScript & Generics

Beherrsche fortgeschrittene Typsystem-Konzepte: Generics <T>, Custom Type Guards, Enums und Utility Types (Partial, Pick, Record).

📂 Dateien dieser Einheit:
📄 aufgabe.js (Startercode) 🧪 test_aufgabe.js (Tests) 💡 musterloesung.js (Lösung) 📖 README.md

1. 🧬 Generics <T>: Flexible & Typsichere Container

Mit Generics erstellst du Datenstrukturen und Funktionen, die mit beliebigen Typen arbeiten, ohne die Typsicherheit zu verlieren:

📊 Generic Interface: PaginiertesErgebnis<T>
interface PaginiertesErgebnis<T> {
  items: T[];
  total: number;
  page: number;
  pageSize: number;
  totalPages: number;
  hasNextPage: boolean;
  hasPrevPage: boolean;
}
// 🎯 Verwendung mit verschiedenen Datentypen:
const userPage: PaginiertesErgebnis<User> = erstellePaginiertesErgebnis(users, 100, 1, 10);
const taskPage: PaginiertesErgebnis<Task> = erstellePaginiertesErgebnis(tasks, 45, 2, 10);

2. 🔍 Type Guards & Type Narrowing

Ein Custom Type Guard (obj is TargetType) prüft zur Laufzeit Daten und versichert dem Compiler den genauen Typ:

function istAdminBenutzer(obj: any): obj is AdminBenutzer {
  return (
    obj !== null &&
    typeof obj === "object" &&
    obj.rolle === "ADMIN" &&
    Array.isArray(obj.berechtigungen) &&
    obj.berechtigungen.length > 0
  );
}
🩻 Didaktische Analogie: Der Röntgenapparat & der Maßanzug

Type Guards sind wie der Flughafen-Röntgenapparat: Unbekannte Daten werden gründlich durchleuchtet, bevor sie in geschützte Bereiche gelassen werden. Utility Types sind wie der Präzisions-Maßanzug: Aus einem Basis-Schnittmuster schneidest du passgenau eine Weste (Pick) oder ein flexibles Übergangshemd (Partial).

📑 3. Cheat-Sheet: TypeScript Utility Types

Utility Type Syntax Wirkung & Einsatzgebiet
Partial<T> Partial<UserProfile> Alle Eigenschaften werden optional (?). Ideal für Updates.
Readonly<T> Readonly<Config> Verhindert Überschreiben (Immutability).
Pick<T, K> Pick<User, "id" | "email"> Wählt nur bestimmte Schlüssel aus T aus.
Omit<T, K> Omit<User, "passwordHash"> Entfernt bestimmte Schlüssel aus T.
Record<K, T> Record<string, number> Erstellt typisierte Key-Value Maps / Dictionaries.

🧠 Diagnostischer Selbst-Check

Überprüfe dein Verständnis der Kernkonzepte und typischen Denkfallen, bevor du den Code in der Web-IDE schreibst.

🎯 4. Aufgaben & Checkliste in aufgabe.js

💻 In Web-IDE öffnen → ← Zurück zu JS 13 (ES Module) Weiter zum Master-Projekt →