Utility Types (Tipos de Utilidad)
Tipos de datos nativos de TS para modificar propiedades
Utility Types en TypeScript
TypeScript incluye tipos de utilidad globales que permiten transformar y manipular estructuras de tipos existentes (interfaces o types) de forma sencilla sin necesidad de duplicar código.
1. Partial<T>
Construye un tipo con todas las propiedades de T establecidas como opcionales (?).
typescripttype Usuario = {
id: number;
nombre: string;
email: string;
};
// ✅ Válido: Permite actualizar solo una parte del usuario
const actualizarNombre: Partial<Usuario> = {
nombre: "Carlos"
};
// ✅ Válido: Puede estar completamente vacío
const usuarioVacio: Partial<Usuario> = {};
2. Required<T>
Construye un tipo con todas las propiedades de T establecidas como obligatorias (remueve los ?).
typescripttype Producto = {
id: number;
nombre: string;
descuento?: number; // Propiedad opcional
};
// ✅ Válido: Obliga a incluir el descuento
const laptop: Required<Producto> = {
id: 1,
nombre: "Laptop Pro",
descuento: 10
};
// ❌ Error: Falta la propiedad opcional que ahora es requerida
// const mouse: Required<Producto> = {
// id: 2,
// nombre: "Mouse Gamer"
// };
3. Readonly<T>
Construye un tipo con todas las propiedades de T marcadas como solo lectura. No se pueden reasignar sus propiedades después de crearse.
typescripttype Config = {
puerto: number;
host: string;
};
const miConfig: Readonly<Config> = {
puerto: 8080,
host: "localhost"
};
// ❌ Error: No se puede modificar una propiedad de solo lectura
// miConfig.puerto = 3000;
4. Pick<T, K>
Construye un tipo seleccionando únicamente las propiedades especificadas (K) del tipo original (T).
typescripttype Usuario = {
id: number;
nombre: string;
email: string;
edad: number;
};
// Seleccionamos solo 'nombre' y 'email'
type PerfilPublico = Pick<Usuario, "email" "nombre" |>;
// ✅ Válido
const perfil: PerfilPublico = {
nombre: "Carlos",
email: "carlos@documentx.com"
};
// ❌ Error: 'id' y 'edad' no existen en PerfilPublico
// const perfilInvalido: PerfilPublico = {
// id: 1,
// nombre: "Carlos",
// email: "carlos@documentx.com",
// edad: 25
// };
5. Omit<T, K>
Construye un tipo omitiendo las propiedades especificadas (K) y conservando todas las demás de T.
typescripttype Usuario = {
id: number;
nombre: string;
email: string;
password: string;
};
// Omitimos 'password' para no exponerlo
type UsuarioSinPassword = Omit<Usuario, "password">;
// ✅ Válido
const usuarioSeguro: UsuarioSinPassword = {
id: 1,
nombre: "Carlos",
email: "carlos@documentx.com"
};
// ❌ Error: 'password' fue omitido y no se puede incluir
// const usuarioInvalido: UsuarioSinPassword = {
// id: 1,
// nombre: "Carlos",
// email: "carlos@documentx.com",
// password: "123"
// };
Tabla Resumen
| Utility Type | Descripción | Resultado |
|---|---|---|
Partial<T> | Convierte todo en opcional | propiedad?: tipo |
Required<T> | Convierte todo en obligatorio | propiedad: tipo |
Readonly<T> | Convierte todo en solo lectura | readonly propiedad: tipo |
Pick<T, K> | Selecciona solo las claves K | Mantiene solo las propiedades indicadas |
Omit<T, K> | Elimina las claves K | Mantiene todas las propiedades excepto las indicadas |