Manipulação Avançada de Tipos com Utility Types
Os Utility Types no TypeScript permitem uma forma de transformar tipos de maneira modular e reutilizável. Alguns dos utility types mais comuns são Partial, Readonly e Record, mas há muitos outros igualmente úteis.
Entendendo Partial, Readonly, Record, e outros
1. Partial<T>
Transforma todas as propriedades de um tipo T em propriedades opcionais.
interface Pessoa {
nome: string;
idade: number;
}
type PessoaParcial = Partial<Pessoa>;
// Equivalent a:
// type PessoaParcial = {
// nome?: string;
// idade?: number;
// }
2. Readonly<T>
Torna todas as propriedades de um tipo T como somente leitura.
type PessoaReadonly = Readonly<Pessoa>;
// Equivalent a:
// type PessoaReadonly = {
// readonly nome: string;
// readonly idade: number;
// }
3. Record<K,T>
Cria um tipo com um conjunto de propriedades K e um tipo de valor T.
type DictionaryNumeros = Record<string, number>;
// Representa um objeto onde as chaves são strings e os valores são números
Casos práticos: transformando tipos com utility types
1. Atualização Parcial
Suponha que você esteja criando uma função para atualizar os detalhes de um usuário. Usando Partial, você pode criar um tipo que representa um subconjunto dos detalhes do usuário:
interface Usuario {
id: number;
nome: string;
email: string;
}
function atualizarUsuario(id: number, detalhes: Partial<Usuario>) {
// atualiza o usuário no banco de dados
}
2. Objetos Configuráveis
Utilizando o tipo Record, você pode criar um tipo para representar um objeto de configuração onde todas as chaves são strings e todos os valores seguem um tipo específico:
type Configuracoes = Record<string, string | number | boolean>;
function aplicarConfiguracoes(config: Configuracoes) {
// aplica as configurações
}
3. Objetos Imutáveis
Para garantir que um objeto não seja modificado após ser criado, você pode usar Readonly:
const userReadonly: Readonly<Usuario> = {
id: 1,
nome: "João",
email: "joao@example.com"
};
// A seguinte linha resultará em erro
// userReadonly.nome = "Pedro";
Outros Utility Types úteis:
-
Pick<T, K extends keyof T>: Cria um tipo selecionando um conjunto de propriedadesKdeT. -
Omit<T, K extends keyof T>: Cria um tipo removendo um conjunto de propriedadesKdeT. -
Exclude<T, U>: Exclui os tipos deUdeT. -
Extract<T, U>: Seleciona os tipos deTque podem ser atribuídos aU. -
ReturnType<T>: Obtem o tipo de retorno de uma função.
Conclusão
Os Utility Types em TypeScript fornecem uma série de ferramentas poderosas para a manipulação de tipos, tornando o sistema de tipos ainda mais flexível e expressivo. Quando você se familiarizar com essas construções, encontrará muitos casos em que elas podem tornar seu código mais limpo e mais seguro.
Top comments (0)