Exaustividade com never (introdução)
Use never para impor switches exaustivos em uniões e detectar casos ausentes antecipadamente.
Exaustividade com never (introdução) é uma aula grátis de TypeScript Academy no CoddyKit. Esta é a aula 3 de 3. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de TypeScript Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de TypeScript Academy inclui 3 aulas no total.
Introdução
Objetivo: garantir que sua instrução de seleção trate todos os membros de uma união. O tipo de valor impossível ajuda o compilador a avisar quando falta um caso novo.
Configuração da união
Crie uma união discriminada com um rótulo literal (por exemplo, kind) para usá-lo posteriormente em uma instrução de seleção.
type Circle = { kind: "circle"; radius: number };
type Square = { kind: "square"; size: number };
type Shape = Circle | Square;Instrução de seleção não exaustiva
Uma ramificação ausente compila, mas a lógica fica incompleta. Precisamos de uma forma de forçar uma falha em tempo de compilação quando faltar um caso.
function areaBad(s: Shape): number {
switch (s.kind) {
case "circle":
return Math.PI * s.radius ** 2;
// OOPS: forgot "square" -> no compile error yet
}
return 0; // silently wrong
}
console.log(areaBad({ kind: "circle", radius: 2 }));Auxiliar assertNever
Defina assertNever: ele aceita apenas never. Se um valor chegar até ele, a instrução de seleção não será exaustiva e o compilador sinalizará o problema.
function assertNever(x: never): never {
throw new Error("Unhandled case: " + JSON.stringify(x));
}Instrução de seleção exaustiva
Adicione um ramo padrão que chame assertNever. Quando surgir um novo membro da união, o compilador exigirá que você o trate.
function area(s: Shape): number {
switch (s.kind) {
case "circle":
return Math.PI * s.radius ** 2;
case "square":
return s.size * s.size;
default:
return assertNever(s); // compiler error if a member is unhandled
}
}
console.log(area({ kind: "square", size: 3 }));Diretrizes
Diretrizes:
- Use um discriminador (como
kind) nos membros da união. - Mantenha o padrão padrão + assertNever.
- Prefira tipos de retorno claros para que os casos ausentes sejam evidentes.
Verificação de exaustividade
Verificação rápida: como tornar exaustiva uma instrução de seleção sobre uma união discriminada?
Recapitulação
Recapitulação: never indica um valor impossível. Use assertNever no ramo padrão para forçar instruções de seleção completas e preparadas para o futuro.
Perguntas Frequentes
A aula “Exaustividade com never (introdução)” é grátis?
Sim — o texto completo de “Exaustividade com never (introdução)” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de TypeScript Academy, atualize para CoddyKit PRO. O curso de TypeScript Academy inclui 3 aulas no total.
O que vou aprender em “Exaustividade com never (introdução)”?
Use never para impor switches exaustivos em uniões e detectar casos ausentes antecipadamente. Você pratica TypeScript Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar TypeScript Academy?
Nenhuma experiência prévia é necessária. TypeScript Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 3.
Quanto tempo leva a aula “Exaustividade com never (introdução)”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de TypeScript Academy?
Sim. Cada aula de TypeScript Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- typeof, igualdade e redução por veracidade
- in, instanceof e uniões discriminadas
- Exaustividade com never (introdução)