A | B Tipos de união

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

A | B Tipos de união

Uma união A | B significa "o valor é A ou B". É preciso estreitá-la primeiro (typeof, in, ...) para o compilador saber com qual variante está lidando.

GrupoComposição de Tipos
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 Id = string | number;
let id: Id = "u1";
id = 42; // ambos são válidos

if (typeof id === "number") {
  id.toFixed(0); // acesso a membros exige estreitamento antes
}

⚙️ Parâmetros

A | BMembros separados por |, em qualquer quantidade; duplicatas são mescladas automaticamente

Retorno:Nenhum valor de retorno — tipos de união existem apenas na camada de tipos e desaparecem após a compilação.

▶ Exemplo

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

Saída:

ABC 3.14

(Saída de execução após a transpilação; chamar value.toUpperCase() sem estreitamento antes é um erro de compilação)

💡 Observações

ℹ️ Info Uma união não estreitada só expõe os membros compartilhados por todas as variantes — o compilador não pode saber qual é.
💡 Dica Escolha o estreitamento conforme o caso: typeof (primitivos), in (presença de propriedade), instanceof (instâncias de classes), igualdade literal (uniões discriminadas).
⚠️ Atenção Muitos membros na união significam estreitamento em todo lugar; se os branches compartilham um campo de tag, migre para uma união discriminada.
Mais casos em breve.

📚 Tutoriais relacionados

❓ Perguntas frequentes

P Por que preciso estreitar antes de chamar métodos?
R Chamar toUpperCase em string | number quebraria se o valor em runtime fosse um number. O estreitamento é como você prova "é uma string".
P União vs any?
R Uma união enumera as possibilidades permitidas e rejeita qualquer outra; any permite tudo e não verifica nada. Uniões são escolha delimitada; any é rendição.
P O que é uma união discriminada?
R Cada membro carrega uma tag literal (kind: "circle" | "rect"); fazer switch na tag estreita o objeto inteiro de uma vez. Veja a entrada discriminated-unions.
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%