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.
| Grupo | Composição de Tipos |
|---|---|
| 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 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 | B | Membros 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.
🏷️ Composição de Tipos Relacionada
💡 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 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.