0Pricing
TypeScript Academy · Aula

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

A verificação de exaustividade usa o tipo `never` para garantir que todos os casos de uma união sejam tratados. Quando adicionar um novo membro à união, TypeScript informará exatamente onde atualizar o código.

O problema da exaustividade

Quando usa switch em um tipo de união e esquece um caso, JavaScript passa silenciosamente para o próximo fluxo. TypeScript pode detectar isso com uma verificação de never.
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

Atribua o valor restante a `never`. Se o TypeScript inferir um tipo diferente de never, isso significa que há um caso não tratado.
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

Se você adicionar 'triangle' à união Shape, o TypeScript emitirá um erro em `assertNever(s)`, indicando que você deve tratar o novo caso.
type Shape = 'circle' | 'square' | 'triangle';
// Now TypeScript errors on assertNever(s) because s is 'triangle'
// — it's not never!

Verificação inline com never

Você pode fazer uma verificação de exaustividade inline sem uma função auxiliar.
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

Use a mesma técnica em cadeias de if/else.
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

never é o tipo inferior e é útil em tipos condicionais para representar ramificações impossíveis.
type NonNullable<T> = T extends null | undefined ? never : T;
// Removes null and undefined from T

Usando never para estados impossíveis

never é útil para modelar estados que devem ser impossíveis no seu sistema de tipos.
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

never é usado em tipos condicionais para filtrar membros de tipo indesejados.
type NonFunctions<T> = {
  [K in keyof T]: T[K] extends Function ? never : K
}[keyof T];
// Returns keys whose values are not functions

never se propaga pelas uniões

never é um elemento identidade para tipos união — T | never = T.
type T = string | never; // string
type U = never | number | never; // number

O auxiliar assertNever

Um utilitário simples como assertNever é algo que todo projeto TypeScript deveria ter para verificações de exaustividade.
function assertNever(value: never, message?: string): never {
  throw new Error(message ?? `Unhandled: ${JSON.stringify(value)}`);
}

Verificação rápida

O que acontece na linha `default: assertNever(s)` se `s` ainda tiver um tipo possível que não foi tratado?

Recapitulação

Use assertNever(x: never) nos casos padrão de switch para obter erros de compilação quando os membros da união não forem tratados. Isso garante que seu código continue correto à medida que a união cresce.

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

  1. typeof e restrição por veracidade
  2. instanceof e in na restrição de tipos
  3. Funções de guarda de tipos definidas pelo usuário
  4. Verificação de exaustividade com never
← Voltar para TypeScript Academy