Pular para conteúdo

Aula 03 - Tipos Avançados 🧩


O Desafio da Flexibilidade 🤸

  • Nem tudo no mundo é preto no branco (string ou number).
  • Às vezes um dado pode ser várias coisas.

Union Types (União) 🤝

  • O operador | (ou).
  • Permite que uma variável aceite mais de um tipo.
let id: number | string;
id = 10;
id = "ABC";

Uniões na Prática 📦

  • Útil para: Status de API, IDs, Cores de tema.

Type Aliases (Apelidos) 🏷️

  • Em vez de repetir string | number, criamos um nome.
type ID = string | number;
let userId: ID = 123;

Aliases de Objetos 🏗️

  • Organização e legibilidade.
type Usuario = {
    nome: string;
    email: string;
};

Intersection Types (Interseção) 🔗

  • O operador & (e).
  • Combina tipos existentes em um novo.
type Pessoa = { nome: string };
type Admin = { nivel: number };

type SuperUser = Pessoa & Admin;

Interseção vs União ⚖️

  • União (|): Um ou outro.
  • Interseção (&): Todos juntos.

Literal Types (Literais) 🎯

  • Restringe uma variável a valores exatos.
type Alinhamento = "esquerda" | "direita" | "centro";

Segurança com Literais 🛡️

  • Evita erros de digitação (ex: "esquerada").

Narrowing: Estreitando Tipos 🔍

  • O TS analisa a lógica do if para saber o tipo exato.
function processar(id: number | string) {
    if (typeof id === "string") {
        // Aqui o TS sabe que é string!
    }
}

Type Guards Reais 🕵️

  • Além de typeof:
  • instanceof (para classes)
  • Operador in (para propriedades)

Funções como Guards 🛡️

  • Podemos criar funções que retornam um booleano de tipagem.
function isUsuario(obj: any): obj is Usuario {
    return "email" in obj;
}

O operador as (Type Assertion) ⚠️

  • Avisar ao TS: "Pode confiar, eu sei que isso é X".
  • Use com cautela!

Non-Null Assertion ‼️

  • O ponto de exclamação !.
  • Garante que algo não é nulo/indefinido.

Discriminated Unions 🆔

  • Adicionar um campo "tag" para facilitar a distinção entre tipos em uma união.
interface Sucesso { type: "sucesso"; data: string; }
interface Erro { type: "erro"; msg: string; }

Exemplo: API Response 📡

graph TD;
    Response[API Response] --> Success[Tipo: Success];
    Response --> Error[Tipo: Error];
    Success --> UI[Renderizar Dados];
    Error --> Log[Mostrar Alerta];

Resumo 🏁

  • Union e Intersection
  • Type Aliases
  • Narrowing e Type Guards

Próxima Aula: Interfaces!

Vamos modelar sistemas complexos. 🚀