Como criar e usar tipos de utilitários TypeScript
O TypeScript fornece um conjunto de tipos de utilitários que facilitam a transformação e o gerenciamento de tipos existentes. Esses tipos de utilitários integrados permitem que os desenvolvedores manipulem tipos de várias maneiras, ajudando a simplificar o código e evitar repetições. Este guia explora alguns dos tipos de utilitários mais comuns e como eles podem ser criados e usados em um projeto TypeScript.
O que são tipos de utilitários TypeScript?
Tipos utilitários no TypeScript são tipos predefinidos que ajudam a transformar outros tipos. Eles podem ser usados para criar novos tipos com base nos existentes, escolhendo, omitindo ou modificando propriedades. Eles desempenham um papel essencial na manutenção de código limpo e reutilizável.
Tipos de utilitários TypeScript comumente usados
Aqui estão alguns dos tipos de utilitários TypeScript mais comumente usados:
- Parcial<T> – Torna todas as propriedades do tipo
T
opcionais. - Obrigatório<T> – Torna todas as propriedades do tipo
T
obrigatórias. - Somente leitura<T> – Torna todas as propriedades do tipo
T
somente leitura. - Pick<T, K> – Seleciona um conjunto de propriedades
K
do tipoT
. - Omitir<T, K> – Remove um conjunto de propriedades
K
do tipoT
. - Record<K, T> – Constrói um tipo de objeto com chaves do tipo
K
e valores do tipoT
.
Exemplo: Usando Partial<T>
O tipo de utilitário Partial
torna todas as propriedades de uma interface opcionais. Veja como ele pode ser usado:
interface User {
name: string;
age: number;
email: string;
}
const updateUser = (user: Partial<User>) => {
// Update logic
};
updateUser({ name: "John" });
Neste exemplo, updateUser
aceita um argumento do tipo Partial<User>
, o que significa que apenas algumas das propriedades da interface User
são necessárias.
Exemplo: Usando Pick<T, K>
O tipo de utilitário Pick
permite selecionar um subconjunto de propriedades de um tipo:
interface User {
name: string;
age: number;
email: string;
}
type UserContactInfo = Pick<User, "name" | "email">;
const contactInfo: UserContactInfo = {
name: "John",
email: "[email protected]"
};
Aqui, Pick<User, “name” | “email”>
cria um novo tipo UserContactInfo
com apenas as propriedades name
e email
da interface original User
.
Exemplo: Usando Omit<T, K>
O tipo de utilitário Omit
remove propriedades especificadas de um tipo:
interface User {
name: string;
age: number;
email: string;
}
type UserWithoutEmail = Omit<User, "email">;
const user: UserWithoutEmail = {
name: "John",
age: 30
};
Neste exemplo, o tipo UserWithoutEmail
é criado omitindo a propriedade email
da interface User
.
Criando tipos de utilitários personalizados
Tipos de utilitários personalizados também podem ser criados usando os recursos de tipo avançados do TypeScript, como tipos condicionais, tipos mapeados e muito mais. Aqui está um exemplo simples de um tipo de utilitário personalizado que torna todas as propriedades opcionais:
type MyPartial<T> = {
[P in keyof T]?: T[P];
};
interface User {
name: string;
age: number;
email: string;
}
const user: MyPartial<User> = {
name: "Alice"
};
Este tipo personalizado MyPartial
funciona de forma semelhante ao tipo de utilitário Partial
integrado do TypeScript.
Conclusão
Os tipos de utilitários TypeScript são um recurso essencial para trabalhar com tipos de forma flexível e reutilizável. Ao aproveitar esses tipos de utilitários, o código pode ser tornado mais conciso e sustentável. Seja usando tipos de utilitários integrados como Partial
, Pick
e Omit
ou criando tipos personalizados, eles aprimoram significativamente o sistema de tipos do TypeScript.