DocumentX Logo
DocumentX.
Ctrl+K
TypeScript/Tipos de Datos

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 TypeDescripciónResultado
Partial<T>Convierte todo en opcionalpropiedad?: tipo
Required<T>Convierte todo en obligatoriopropiedad: tipo
Readonly<T>Convierte todo en solo lecturareadonly propiedad: tipo
Pick<T, K>Selecciona solo las claves KMantiene solo las propiedades indicadas
Omit<T, K>Elimina las claves KMantiene todas las propiedades excepto las indicadas