O que são Union Types e como eles funcionam?

Nas lições anteriores, você aprendeu a trabalhar com tipos primitivos como string e booleano. Mas o TypeScript permite que você crie novos tipos a partir dos existentes. Um exemplo disso seria o tipo união. Um tipo union é um tipo que combina dois ou mais outros tipos. Aqui está a sintaxe básica:
type1 | type2 | type3
Vamos dar uma olhada em alguns exemplos para entender melhor o conceito. Aqui está uma variável chamada id com um tipo união para string ou number:
let id: string | number = "user_783";
O valor pode ser atualizado para um número que ainda seja válido para o tipo união:
let id: string | number = 1024;
Se você tentou atribuir outro valor que não seja um string ou number, então o TypeScript exibirá uma mensagem de erro:
// Type 'string[]' is not assignable to type 'string | number'.
let id: string | number = ["Java", "Python"];
Ao trabalhar com tipos union, é importante usar métodos que funcionem para todos os tipos, caso contrário o TypeScript lançará um erro como este:
function getId(id: string | number) {
  // Property 'toUpperCase' does not exist on type 'string | number'.
  return id.toUpperCase();
}
Existe uma solução para isso que envolve restringir a união. Mas você aprenderá mais sobre isso assim como sobre como os tipos união funcionam com aliases de tipo em lições futuras. Tipos union também são úteis ao trabalhar com null e undefined values. Aqui está um exemplo onde uma variável pode conter um string value, ou pode ser null se nenhum valor tiver sido definido ainda:
let username: string | null;

// Type 'number' is not assignable to type 'string | null'.
username = 42;
Neste caso, username pode ser uma string ou null, mas nada mais. Você pode usar null quando quiser intencionalmente representar a ausência de um valor. Aqui está outro exemplo usando undefined:
let score: number | undefined;

score = undefined; 

// Type 'string' is not assignable to type 'number | undefined'.
score = "high";
Neste exemplo, score pode ser um number ou undefined. Você pode usar undefined quando um valor ainda não foi atribuído. Usar tipos união com null e undefined deixa claro quando um valor pode estar ausente, enquanto ainda permite que o TypeScript detecte atribuições inválidas.
Este módulo não possui perguntas. Marque como concluído.