Avatar ·

TypeScript: wie erstelle ich ein Interface, bei dem genau eine von zwei Eigenschaften erforderlich ist?

Hallo zusammen! Ich schreibe eine TypeScript-Anwendung zur Auftragsverarbeitung. Ich habe ein Interface für einen Benutzer, der entweder registriert (dann hat er `userId`) oder ein Gast (dann hat er `guestToken`) sein kann. Aber das Wichtigste ist, dass der Benutzer genau eines dieser beiden Felder haben soll, nicht beide gleichzeitig und keines von beiden. So habe ich es versucht: ```typescript interface User { name: string; email: string; userId?: number; guestToken?: string; } ``` Das Problem ist jedoch, dass TypeScript ein Objekt erlaubt, bei dem beide Felder fehlen oder beide gleichzeitig vorhanden sind. Zum Beispiel: ```typescript const user1: User = { name: "Anna", email: "a@mail.ru" }; // Weder userId noch guestToken – kein Fehler const user2: User = { name: "Ivan", email: "i@mail.ru", userId: 123, guestToken: "abc" }; // Beide Felder vorhanden – auch kein Fehler ``` Ich brauche, dass der Compiler streng prüft: entweder ist `userId` vorhanden (und `guestToken` nicht), oder `guestToken` ist vorhanden (und `userId` nicht).