Verificação de exaustividade com never
Utilize never para garantir que todos os casos da união sejam tratados
Verificação de exaustividade com never é uma aula grátis de TypeScript Academy no CoddyKit. Esta é a aula 4 de 4. 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 4 aulas no total.
Boas-vindas
O problema da exaustividade
type Shape = 'circle' | 'square';
function area(s: Shape): number {
if (s === 'circle') return 3.14;
if (s === 'square') return 1;
// What if we add 'triangle'?
}O padrão de exaustividade com never
function assertNever(x: never): never {
throw new Error('Unexpected value: ' + x);
}
function area(s: Shape): number {
switch (s) {
case 'circle': return 3.14;
case 'square': return 1;
default: return assertNever(s);
}
}Adicionando um novo membro à união
type Shape = 'circle' | 'square' | 'triangle';
// Now TypeScript errors on assertNever(s) because s is 'triangle'
// — it's not never!Verificação inline com never
function handle(shape: Shape): string {
switch (shape.kind) {
case 'circle': return 'circle';
case 'square': return 'square';
default:
const _: never = shape; // Error if not exhaustive
throw new Error('Unknown shape');
}
}Exaustividade sem switch
function process(action: Action): void {
if (action.type === 'A') { /* ... */ }
else if (action.type === 'B') { /* ... */ }
else {
const _: never = action; // exhaustive
}
}never nas restrições de tipos genéricos
type NonNullable<T> = T extends null | undefined ? never : T;
// Removes null and undefined from TUsando never para estados impossíveis
type State<T> =
| { kind: 'loading' }
| { kind: 'success'; data: T }
| { kind: 'error'; msg: string };
// There should never be a state with kind: 'unknown'never em tipos condicionais
type NonFunctions<T> = {
[K in keyof T]: T[K] extends Function ? never : K
}[keyof T];
// Returns keys whose values are not functionsnever se propaga pelas uniões
type T = string | never; // string
type U = never | number | never; // numberO auxiliar assertNever
function assertNever(value: never, message?: string): never {
throw new Error(message ?? `Unhandled: ${JSON.stringify(value)}`);
}Verificação rápida
Recapitulação
Perguntas Frequentes
A aula “Verificação de exaustividade com never” é grátis?
Sim — o texto completo de “Verificação de exaustividade com never” é 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 4 aulas no total.
O que vou aprender em “Verificação de exaustividade com never”?
Utilize never para garantir que todos os casos da união sejam tratados 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 4 de 4.
Quanto tempo leva a aula “Verificação de exaustividade com never”?
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 e restrição por veracidade
- instanceof e in na restrição de tipos
- Funções de guarda de tipos definidas pelo usuário
- Verificação de exaustividade com never