Avatar ·

TypeScript: cómo hacer una interfaz en la que sea obligatoria una de dos propiedades

¡Hola a todos! Estoy escribiendo una aplicación en TypeScript para procesar pedidos. Tengo una interfaz para un usuario que puede ser registrado (y entonces tiene `userId`) o invitado (y entonces tiene `guestToken`). Pero lo más importante es que el usuario debe tener exactamente uno de estos dos campos, no ambos a la vez ni ninguno. Así es como intenté hacerlo: ```typescript interface User { name: string; email: string; userId?: number; guestToken?: string; } ``` Pero el problema es que TypeScript permite crear un objeto donde ambos campos faltan, o ambos están presentes al mismo tiempo. Por ejemplo: ```typescript const user1: User = { name: "Anna", email: "a@mail.ru" }; // No tiene ni userId ni guestToken — no se lanza error const user2: User = { name: "Iván", email: "i@mail.ru", userId: 123, guestToken: "abc" }; // Tiene ambos campos — tampoco hay error ``` Necesito que el compilador verifique estrictamente: o bien tiene `userId` (y no tiene `guestToken`), o bien tiene `guestToken` (y no tiene `userId`).