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";
- 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. 🚀