Avatar ·

TypeScript: como criar uma interface onde uma das duas propriedades é obrigatória?

Olá a todos! Estou escrevendo um aplicativo em TypeScript para processamento de pedidos. Tenho uma interface para um usuário que pode ser registrado (e então ele tem `userId`) ou convidado (e então ele tem `guestToken`). Mas o mais importante é que o usuário deve ter exatamente um desses dois campos, não ambos ao mesmo tempo e nem nenhum. Aqui está como tentei fazer: ```typescript interface User { name: string; email: string; userId?: number; guestToken?: string; } ``` Mas o problema é que o TypeScript permite criar um objeto onde ambos os campos estão ausentes, ou ambos presentes ao mesmo tempo. Por exemplo: ```typescript const user1: User = { name: "Anna", email: "a@mail.ru" }; // Sem userId e sem guestToken — nenhum erro é emitido const user2: User = { name: "Ivan", email: "i@mail.ru", userId: 123, guestToken: "abc" }; // Ambos os campos presentes — também nenhum erro ``` Preciso que o compilador verifique rigorosamente: ou existe `userId` (e não existe `guestToken`), ou existe `guestToken` (e não existe `userId`).