Exclude<T, U> Exclude (com Extract)

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

Exclude<T, U> Exclude (com Extract)

Exclude<T, U> remove da união T os membros atribuíveis a U — tipicamente para aparar ramos de que não se precisa em uma união grande. Seu espelho Extract<T, U> mantém apenas os membros atribuíveis a U. Ambos se apoiam no comportamento distributivo dos tipos condicionais.

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 Exclude<T, U> = T extends U ? never : T;
type Extract<T, U> = T extends U ? T : never;

// Uso
type PassiveEvent = Exclude<EventType, "click" | "keydown">;
type Interactive = Extract<EventType, "click" | "keydown">;

⚙️ Parâmetros

TA união de origem; cada membro é testado pelo tipo condicional por vez (distributividade)
UO filtro: membros atribuíveis a U são removidos (Exclude) ou mantidos (Extract)

Retorno:Um novo tipo união: Exclude é a diferença T menos U; Extract é a interseção de T e U.

▶ Exemplo

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

Saída:

focus | scroll | wheel
click | keydown

(Saída de execução após a transpilação; o efeito no nível de tipo: dar push de "click" em passiveEvents é um erro de compilação — Exclude já o removeu de PassiveEvent)

💡 Observações

ℹ️ Info Funciona por meio de tipos condicionais distributivos: quando T é uma união, T extends U é avaliado por membro e os resultados são recombinados. Um membro que corresponde a U se torna never (desaparecendo da união) — é assim que a "exclusão" é implementada.
⚠️ Atenção Essas ferramentas só fazem sentido em tipos união. Aplicá-las a um tipo de objeto não união não processa as propriedades uma a uma e contraria a intuição — use Omit/Pick para propriedades de objetos.
💡 Dica NonNullable<T> é simplesmente Exclude<T, null | undefined>. Sabendo disso, a sua compreensão de Exclude se transfere diretamente.
Mais casos em breve.

📚 Tutoriais relacionados

❓ Perguntas frequentes

P Qual é a diferença entre Exclude e Omit?
R Exclude opera sobre membros de uniões; Omit opera sobre chaves de propriedades de objetos. O Omit na verdade é implementado via Exclude: Exclude<keyof T, K> apara as chaves antes do Pick. Um gerencia membros, o outro chaves.
P Por que "distributivo"? E se não distribuísse?
R Sem distribuição, T extends U compararia a união inteira "click"|"focus"|... de uma só vez com U, a consideraria não atribuível e não removeria nada. A distribuição testa cada membro individualmente — esse é o próprio mecanismo para filtrar membros de uniões.
P Exclude pode remover membros objeto de uma união?
R Sim, desde que o membro seja atribuível a U. Por exemplo, com type Shape = Circle | Square, Exclude<Shape, Square> descarta Square. O critério é sempre a atribuibilidade, não a igualdade literal.
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%