Überprüfung des Vorhandenseins eines Werts in Enum TypeScript: Vollständige Anleitung

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

Warum den Wert in einem Enum TypeScript prüfen? Ein praktisches Beispiel

\n\n

Stellen Sie sich vor: Sie schreiben ein Backend in Node.js mit TypeScript. Der Client sendet einen Bestellstatus – den String "shipped". Sie haben ein Enum OrderStatus mit den Varianten: Pending, Processing, Shipped, Delivered. Doch plötzlich kommt "CANCELLED" oder "unknown". Was tun? Richtig – überprüfen, ob der Wert im Enum TypeScript existiert.

\n\n

Diese Aufgabe ist eine der häufigsten auf Stack Overflow (tausende Aufrufe). Und das zu Recht: Ein Enum in TypeScript ist nicht nur eine Sammlung von Konstanten, sondern ein kniffliges Konstrukt mit numerischen und stringbasierten Varianten. In dieser Anleitung analysieren wir alle Methoden zur Überprüfung des Vorhandenseins eines Werts in einem Enum, von einfach bis fortgeschritten, mit Codebeispielen und Erklärungen.

\n\n

Wenn Sie gerade erst anfangen, TypeScript zu lernen, oder Ihr Wissen vertiefen möchten – dieser Artikel ist für Sie. Los geht's!

\n\n

Was ist ein Enum in TypeScript? Eine kurze Einführung

\n\n

Ein Enum (Aufzählung) ist eine Möglichkeit, einen Satz benannter Konstanten zu definieren. In TypeScript gibt es zwei Arten von Enums:

\n\n
    \n
  • Numerische Enums – Werte werden automatisch inkrementiert (0, 1, 2...).
  • \n
  • String-Enums – Jedem Member wird explizit ein String zugewiesen.
  • \n
\n\n

Beispiel für ein numerisches Enum:

\n\n
enum Direction {\n    Up,    // 0\n    Down,  // 1\n    Left,  // 2\n    Right  // 3\n}
\n\n

Beispiel für ein String-Enum:

\n\n
enum Status {\n    Active = "ACTIVE",\n    Inactive = "INACTIVE",\n    Pending = "PENDING"\n}
\n\n

Warum überhaupt den Wert prüfen? Weil Daten von außen (API, Formulare, Datenbanken) beliebig sein können. Ohne Prüfung riskieren Sie undefined oder einen Laufzeitfehler.

\n\n

Methode 1. Der Klassiker: Object.values() + includes()

\n\n

Die beliebteste und lesbarste Methode – das Enum in ein Werte-Array umwandeln und die Zugehörigkeit mit includes() prüfen.

\n\n

Für String-Enums:

\n\n
enum Color {\n    Red = "RED",\n    Green = "GREEN",\n    Blue = "BLUE"\n}\n\nfunction isColor(value: string): boolean {\n    return Object.values(Color).includes(value as Color);\n}\n\nconsole.log(isColor("RED"));    // true\nconsole.log(isColor("YELLOW")); // false
\n\n

Für numerische Enums – ein Trick! Object.values() gibt ein reverses Mapping (Schlüssel und Werte) zurück. Daher müssen Sie nur Zahlen filtern:

\n\n
enum NumberEnum {\n    A = 1,\n    B = 2,\n    C = 3\n}\n\nfunction isNumberEnumValue(value: number): boolean {\n    return Object.values(NumberEnum).filter(v => typeof v === 'number').includes(value);\n}\n\nconsole.log(isNumberEnumValue(2)); // true\nconsole.log(isNumberEnumValue(5)); // false
\n\n

Dieser Ansatz ist universell, erfordert aber Vorsicht bei numerischen Enums. Vorteil: einfach und anschaulich. Nachteil: Sie müssen an die Filterung denken.

\n\n

Methode 2. Type Guard: Prüfung über Enum-Schlüssel

\n\n

Wenn Sie nicht nur den Wert prüfen, sondern auch eine Typgarantie erhalten möchten, verwenden Sie einen Type Guard. Diese Methode ist besonders nützlich bei der Arbeit mit APIs, wenn Sie den Typ eingrenzen möchten.

\n\n
enum UserRole {\n    Admin = "admin",\n    User = "user",\n    Guest = "guest"\n}\n\nfunction isUserRole(value: string): value is UserRole {\n    return Object.values(UserRole).includes(value as UserRole);\n}\n\nfunction processRole(role: string) {\n    if (isUserRole(role)) {\n        // TypeScript weiß, dass role ein UserRole ist\n        console.log(`Rolle: ${role}`);\n    } else {\n        console.log("Unbekannte Rolle");\n    }\n}\n\nprocessRole("admin"); // Rolle: admin\nprocessRole("moderator"); // Unbekannte Rolle
\n\n

Dieser Ansatz bietet Typsicherheit und reduziert die Anzahl der Prüfungen im Code. Ich empfehle ihn für ernsthafte Projekte.

\n\n

Methode 3. Benutzerdefinierte Helferf

Blogs

Buchempfehlungen