devterview_$ iniciar simulação

Uniões discriminadas e exaustividade

MédioPlenoSistema de tipos

Pergunta

O que é uma união discriminada em TypeScript e como você garante que um `switch` sobre ela trate todos os casos?

Resposta esperada

Uma união discriminada é um `type` que combina variantes, cada uma com uma propriedade literal comum (a 'tag'/'discriminante') que o compilador usa pra estreitar: `type Evento = { tipo: 'click'; x: number } | { tipo: 'scroll'; delta: number }`. Num `switch (e.tipo)`, dentro de `case 'click'` o TS sabe que `e` tem `x`. Pra garantir exaustividade — que adicionar uma variante nova sem tratá-la vire erro de compilação — você põe um `default` que atribui a variável a uma constante `never`: `const _exhaustive: never = e;`. Se sobra alguma variante não tratada, ela não é `never`, e o compilador reclama exatamente ali. É o jeito de fazer o sistema de tipos te lembrar de todos os pontos que precisam mudar quando o modelo cresce.

Por que perguntam isso

Pergunta pleno/sênior de TS. O truque do `never` no default é o teste. Conecta com a pergunta de `never`.

#discriminated-union#exhaustiveness#never
publicidade

Relacionadas