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`).
No answers yet.
Faça login para deixar uma resposta