Butecho

PaposPetisco

O never é o garçom que confere a comanda

Um truque curto de TypeScript pra nenhum pedido novo sair da cozinha sem tratamento.

João · · 1 min de leitura

Você tem um tipo com várias variantes e um switch que trata cada uma. Tudo funciona. Seis meses depois, alguém adiciona uma variante nova e esquece do switch. O código compila, e o bug aparece em produção.

O tipo never resolve isso. Ele representa um valor que não pode existir.

type Pedido = { tipo: 'cafe' } | { tipo: 'pastel'; recheio: string };

function preparar(pedido: Pedido): string {
  switch (pedido.tipo) {
    case 'cafe':
      return 'passando um café';
    case 'pastel':
      return `fritando pastel de ${pedido.recheio}`;
    default: {
      const faltouTratar: never = pedido;
      throw new Error(`Pedido desconhecido: ${JSON.stringify(faltouTratar)}`);
    }
  }
}

Depois dos dois case, o TypeScript sabe que não sobrou nenhuma variante. Por isso pedido cabe em never.

Agora adicione { tipo: 'torresmo' } ao tipo Pedido. A linha do default para de compilar, porque sobrou um pedido sem tratamento. O erro aparece no editor, e não na mão do cliente.

A saideira

Sai pelo Substack. Dá pra cancelar quando quiser.

Mais papo na mesa

balcãoCtrl K
$ echo "puxa uma cadeira"
puxa uma cadeira
Terminal de verdade: digita help ou usa um atalho.