NonNullable<T>
Última atualização: 2026-10-22
NonNullable<T> NonNullable
NonNullable<T> remove null e undefined de T. Serve para os casos em que um campo pode estar vazio na declaração, mas há garantia de não vazio quando se chega nele — depois de um fallback de valor padrão ou da filtragem de um array, por exemplo. É essencialmente um alias dedicado de Exclude<T, null | undefined>.
| Grupo | Tipos Utilitários |
|---|---|
| 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
type NonNullable<T> = T extends null | undefined ? never : T;
// Uso
type Name = NonNullable<string | null | undefined>; // string
function pickFirst(values: Array<string | null | undefined>): string {
for (const v of values) {
if (v != null) {
const clean: NonNullable<typeof v> = v;
return clean;
}
}
return "(none)";
}
⚙️ Parâmetros
| T | O tipo de origem, geralmente contendo membros null/undefined; uniões são limpas membro por membro |
|---|
Retorno:Um novo tipo: T com null e undefined removidos.
▶ Exemplo
Edite o código abaixo e clique em Testar para ver o resultado transpilado:
Saída:
Ada
(none)
(Saída de execução após a transpilação; no nível de tipo, CleanField é string | number — null/undefined já foram removidos, e apenas valores que sobrevivem ao filtro v != null podem ser atribuídos a ele)
💡 Observações
ℹ️ Info Implementação: type NonNullable<T> = T extends null | undefined ? never : T — o mesmo padrão de tipo condicional distributivo de Exclude.
💡 Dica Ele altera apenas tipos: a limpeza em tempo de execução precisa de filtragem v != null, padrões ?? ou Array.filter. Combine a ferramenta de nível de tipo com a limpeza em tempo de execução para uma solução completa.
⚠️ Atenção Não use NonNullable para branquear vazios sobre os quais você não tem certeza: rotular string | null como string compila sem problema e ainda quebra com null.dosomething em tempo de execução. Trate os valores vazios primeiro com verificações em tempo de execução.
🏷️ Tipos Utilitários Relacionados
💡 Casos relacionados
Mais casos em breve.
📚 Tutoriais relacionados
❓ Perguntas frequentes
P Qual é a diferença entre NonNullable e a asserção não nula !?
R Ambos removem null/undefined, mas NonNullable é um cálculo de tipo (um novo tipo reutilizável e combinável), enquanto ! é uma asserção no nível de expressão (in loco, não reutilizável). Use NonNullable quando precisar do tipo sem vazios como um tipo de primeira classe.
P NonNullable afeta boolean?
R Não — ele tem como alvo apenas os literais null e undefined. NonNullable<boolean | null> resulta em boolean (incluindo true e false).
P NonNullable ainda faz sentido com strictNullChecks desativado?
R Com strictNullChecks desativado, null/undefined são atribuíveis a tudo, então o estreitamento se torna imperceptível. NonNullable só faz sentido sob strictNullChecks — mais uma razão para manter sempre o modo estrito ativo.