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.
| Grupo | Tipos Básicos |
|---|---|
| Tipo | Tipo |
| Modo strict | Nã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
| (): never | Apenas 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.
🏷️ Tipos Básicos Relacionados
💡 Casos relacionados
Mais casos em breve.
📚 Tutoriais relacionados
Tipos de união e tipos literais no TypeScript
Lição 6: Tipos de união e tipos literais no TypeScript
❓ 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.