Aula 07 - Utility Types e Manipulação de Tipos ⚙️
O que são Utility Types? 🛠️
- Atalhos integrados no TypeScript.
- Transformam tipos existentes em novos tipos de forma fácil.
Partial<T> (Opcional) ❓
- Torna todas as propriedades de um tipo opcionais.
Exemplo: Update de Usuário 🔄
- Frequentemente usado em formulários de edição onde você só muda alguns campos.
function update(id: number, fields: Partial<User>) { ... }
Required<T> (Obrigatório) ❗️
- O oposto do Partial.
- Garante que todas as propriedades existam, mesmo as marcadas com
?.
Readonly<T> (Imutável) 🔒
- Transformar todas as propriedades em apenas leitura.
Curiosidade 🧠
Readonly só impede a alteração via TypeScript. No JavaScript compilado, o valor ainda pode ser alterado se não usarmos técnicas de JS como Object.freeze.
Pick<T, K> (Escolher) 🎯
- Selecionar apenas algumas propriedades de um tipo.
type UserBasic = Pick<User, "nome" | "email">;
Omit<T, K> (Omitir) 🚫
- Remove propriedades específicas de um tipo.
type UserSemSenha = Omit<User, "senha">;
Pick vs Omit ⚖️
- Use
Pick quando quiser poucas coisas de um tipo grande.
- Use
Omit quando quiser remover poucas coisas de um tipo grande.
Record<K, T> (Mapear) 🗺️
- Criar um objeto de chave-valor bem definido.
const roles: Record<number, string> = {
1: "Admin",
2: "User"
};
- Exclude: Remove tipos de uma união.
- Extract: Mantém apenas tipos comuns entre uniões.
ReturnType<T> 📞
- Captura o tipo de retorno de uma função automaticamente.
Por que usar estes utilitários? 💎
- Evita repetição de código (DRY).
- Se o tipo base mudar, os utilitários se atualizam sozinhos!
Mapped Types: Por debaixo dos panos 🪄
- Os Utility Types usam iteração sobre as chaves do objeto para funcionar.
graph LR;
Original[User Full] -- "Omit 'senha'" --> Public[User Public];
Original -- "Partial" --> Update[User Update Form];
Original -- "Pick 'id' | 'nome'" --> Summary[User Summary];
Dica: Documentação Oficial 📚
- O TypeScript possui dezenas de utilitários. Sempre consulte antes de criar um tipo complexo manualmente.
Utility Types em APIs 📡
- Muito útil para filtrar dados sensíveis antes de enviá-los ao frontend.
- Reduza suas 200 linhas de interfaces para 50 usando composição e utilitários.
Resumo 🏁
- Partial, Required e Readonly
- Pick e Omit
- Record e ReturnType
Próxima Aula: Manipulação Avançada!
Vamos ver Keyof, Infer e Conditional Types. 🚀
Perguntas? ❓