Aula 07 – Utility Types e Manipulação de Tipos ⚙️
Objetivo
Nesta aula, conheceremos os utilitários integrados do TypeScript que facilitam a transformação de tipos existentes. Eles são essenciais para manter o código DRY (Don't Repeat Yourself) e flexível.
1. O que são Utility Types? 🛠️
Os Utility Types são tipos globais fornecidos pelo TypeScript que permitem realizar mapeamentos e transformações comuns de forma simples e segura.
2. Utilitários de Propriedades 📋
Partial
Torna todas as propriedades de um tipo opcionais. Útil para atualizações parciais de dados.
interface Usuario {
id: number;
nome: string;
email: string;
}
const atualizar: Partial<Usuario> = { nome: "Novo Nome" };
Required
O oposto do Partial. Torna todas as propriedades obrigatórias.
Readonly
Torna todas as propriedades apenas de leitura, impedindo alterações após a atribuição inicial.
3. Utilitários de Seleção ✂️
Pick
Cria um novo tipo escolhendo apenas algumas propriedades do tipo original.
Omit
Cria um novo tipo removendo as propriedades especificadas.
4. Utilitários de Estrutura 🏗️
Record
Cria um tipo de objeto onde as chaves são do tipo K e os valores são do tipo T.
type Configuracoes = Record<"tema" | "idioma", string>;
const config: Configuracoes = {
tema: "dark",
idioma: "pt-BR"
};
5. Mapped Types (Breve Introdução) 🗺️
Os Utility Types acima são construídos usando Mapped Types. Eles permitem que você percorra as propriedades de um tipo e crie um novo.
Visualizando a Transformação (Mermaid)
graph LR;
Original[Interface Original] -- "Partial< T >" --> Opcional[Todas Opcionais];
Original -- "Pick< T, K >" --> Selecionado[Apenas Algumas];
Original -- "Readonly< T >" --> Protegido[Apenas Leitura];
style Original fill:#e1f5fe,stroke:#01579b
6. Exercícios Práticos 📝
- Básico: Use
Partialpara criar uma função que aceite uma atualização parcial de um objetoProduto. - Básico: Crie uma interface
Configcom propriedades opcionais e useRequiredpara garantir que todas estejam presentes em uma variável. - Intermediário: Use
Pickpara extrair apenas otituloe adatade uma interfacePost. - Intermediário: Use
Recordpara criar um dicionário de traduções onde as chaves são "ola" e "tchau" e os valores são strings. - Desafio: Combine
OmiteReadonlypara criar um tipo de dado que não contenha o ID de umUsuarioe seja imutável.
🚀 Mini-Projeto da Aula
Crie um Transformador de Modelos.
- Defina uma interface robusta para um Pedido.
- Crie um tipo para a visualização resumida do pedido (Pick).
- Crie um tipo para a criação de um pedido (onde campos como id e dataGeracao são omitidos via Omit).
- Garanta que os dados da API sejam de apenas leitura (Readonly).
Próxima Aula: Vamos mergulhar na Manipulação Avançada de Tipos e entender tipos condicionais e o operador infer!