Wie man einen String in einen Enum in TypeScript umwandelt: Vollständiges Tutorial

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

Wie man einen String in einen Enum in TypeScript umwandelt: Schritt-für-Schritt-Anleitung

\n\n

Haben Sie jemals die Situation erlebt, in der eine API einen String zurückgibt, Ihr TypeScript-Modell jedoch streng über einen Enum typisiert ist? Oder vielleicht erhalten Sie einen Wert aus localStorage und möchten ihn sicher in eine Aufzählung umwandeln? Wenn ja, sind Sie hier genau richtig. In diesem Artikel werden wir behandeln, wie man einen String in einen Enum in TypeScript konvertiert – von einfachen Lösungen bis hin zu fortgeschrittenen Techniken mit Fehlerbehandlung.

\n\n

Dieses Thema ist eines der beliebtesten auf Stack Overflow (tausende Aufrufe!) und das aus gutem Grund. Selbst erfahrene Entwickler sind oft verwirrt, wenn es um die sichere Umwandlung von Strings in Aufzählungen geht. Lassen Sie uns alles Schritt für Schritt erklären.

\n\n

Was ist ein Enum in TypeScript und warum sollte man ihn konvertieren?

\n\n

Ein Enum (Aufzählung) ist ein leistungsstarkes Werkzeug in TypeScript, mit dem Sie eine Reihe benannter Konstanten definieren können. Anstatt "magische Strings" wie 'active' oder 'pending' zu verwenden, definieren Sie einen Enum und arbeiten mit typisierten Werten. Aber hier liegt das Problem: Daten aus externen Quellen (APIs, Formulare, Konfigurationsdateien) kommen oft als normale Strings. Und dann stellt sich die Frage: Wie wandelt man einen String sicher und elegant in einen Enum in TypeScript um?

\n\n
// Beispiel Enum\nenum Status {\n  Active = 'active',\n  Inactive = 'inactive',\n  Pending = 'pending'\n}\n\n// String aus einer API\nconst apiStatus: string = 'active';\n// Wie erhält man Status.Active? 🤔
\n\n

Methode 1: Direkte Typumwandlung (Type Assertion)

\n\n

Die einfachste, aber auch gefährlichste Methode. Sie sagen TypeScript einfach: "Glaub mir, das ist der richtige Wert."

\n\n
const status = apiStatus as Status;\n// oder\nconst status = <Status>apiStatus;
\n\n

Vorteil: Minimaler Code. Nachteil: Wenn der String keinem Enum-Wert entspricht, erhalten Sie undefined ohne Warnung. TypeScript wirft keinen Fehler, und Sie erfahren erst zur Laufzeit von dem Problem, wenn etwas kaputt geht.

\n\n

Diese Methode sollten Sie nur verwenden, wenn Sie absolut sicher über die Datenquelle sind. Für die Produktion wird sie nicht empfohlen.

\n\n

Methode 2: Verwendung einer benutzerdefinierten Hilfsfunktion

\n\n

Dies ist der goldene Mittelweg zwischen Einfachheit und Sicherheit. Schreiben wir eine Funktion, die einen String nimmt und prüft, ob ein solcher Wert im Enum existiert.

\n\n
function stringToEnum<T>(value: string, enumObject: T): T[keyof T] | undefined {\n  // Prüfen, ob der Wert im Enum vorhanden ist\n  const enumValues = Object.values(enumObject) as string[];\n  if (enumValues.includes(value)) {\n    return value as unknown as T[keyof T];\n  }\n  return undefined;\n}\n\n// Verwendung\nconst status = stringToEnum(apiStatus, Status);\nif (status) {\n  console.log(status); // Status.Active\n} else {\n  console.error('Ungültiger Statuswert');\n}
\n\n

Diese Funktion wandelt einen String sicher in einen Enum in TypeScript um. Wenn der Wert nicht gefunden wird, gibt sie undefined zurück, und Sie können diesen Fall behandeln. Beachten Sie das Generikum <T> – es macht die Funktion universell für jeden Enum.

\n\n

Methode 3: Strikter Ansatz mit Fehlerauslösung

\n\n

Manchmal ist undefined nicht das, was Sie brauchen. Besser ist es, explizit einen Fehler auszulösen, um das Problem schnell zu erkennen.

\n\n
function stringToEnumStrict<T>(value: string, enumObject: T): T[keyof T] {\n  const enumValues = Object.values(enumObject) as string[];\n  if (enumValues.includes(value)) {\n    return value as unknown as T[keyof T];\n  }\n  throw new Error(`Wert "${value}" wurde im Enum nicht gefunden`);\n}\n\n// Verwendung\ntry {\n  const status = stringToEnumStrict(apiStatus, Status);\n  // Arbeiten mit status\n} catch (error) {\n  console.error(error.message);\n  // Fehler in Sentry oder einem anderen Überwachungssystem protokollieren\n}

                
                

Blogs

Buchempfehlungen