never Tipo never

Última atualização: 2026-10-22

never Tipo never

never significa "nenhum valor jamais": funções que lançam erro ou entram em loop infinito retornam never. Na camada de tipos é subtipo de todos os tipos, famoso pelas verificações de exaustividade em switch.

GrupoTipos Básicos
TipoTipo
Modo strictNão necessário

ℹ️ Info O editor transpila TypeScript para JavaScript e o executa (sem verificação de tipos); veja a Saída de cada exemplo para o resultado da verificação.

📝 Sintaxe

function fail(msg: string): never {
  throw new Error(msg);
}
// Exaustividade: o ramo default transforma casos esquecidos em erros de compilação
type Shape = Circle | Square;

⚙️ Parâmetros

(): neverApenas throw, loops infinitos ou chamadas a outras funções never — um return normal é um erro

Retorno:never é ele próprio o tipo de retorno: a função nunca retorna normalmente (lança erro, encerra ou entra em loop infinito).

▶ Exemplo

Edite o código abaixo e clique em Testar para ver o resultado transpilado:

Saída:

caught: disk full

(Saída de execução após a transpilação; escrever return 1 dentro de fail é um erro de compilação — funções never não podem retornar normalmente)

💡 Observações

ℹ️ Info never é subtipo de todo tipo, porém nenhum valor (nem mesmo any) pode ser atribuído a ele — é o conjunto vazio.
💡 Dica Idioma de exaustividade: const _exhaustive: never = value no branch default. Adicionar um membro à união sem tratá-lo quebra o build ali mesmo (veja exhaustive-checks).
⚠️ Atenção never e void ambos "não retornam nada", mas diferem fundamentalmente: void termina normalmente sem valor; never nunca termina normalmente.
Mais casos em breve.

📚 Tutoriais relacionados

❓ Perguntas frequentes

P never vs void?
R void: a função termina normalmente sem valor (um logger). never: a função nunca termina normalmente (lança erro/loop infinito), ou nenhum valor existe na camada de tipos.
P Para que never é realmente usado?
R Dois usos principais: anotar funções que lançam erro/encerram, e verificações de exaustividade — atribuir a união estreitada a never em um branch default, fazendo casos esquecidos falharem o build. Também filtra membros de união em conditional types.
P Por que o tipo da minha variável virou never?
R Normalmente por estreitamento excessivo: depois de eliminar todos os branches nada resta, ou você tocou código inalcançável. Inspecione o que a análise de fluxo deixou — frequentemente uma condição duplicada.
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%