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>.

GrupoTipos Utilitários
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

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

TO 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.
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.
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%