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).