Inicio > Cursos > TypeScript > Utility Types
TypeScriptTipos AvanzadosLección 8 de 18

Utility Types

TypeScript viene con una caja de herramientas de tipos predefinidos llamados Utility Types. Son genéricos que transforman tipos existentes de formas muy útiles. En lugar de definir manualmente el tipo de "un Usuario pero con todos los campos opcionales para cuando haces un PATCH", usas Partial<Usuario>.

En lugar de redefinir "un Usuario pero sin el id y sin la fecha de creación para cuando haces un POST", usas Omit<Usuario, "id" | "creadoEn">.

Los Utility Types más usados en APIs REST son: Partial<T> para actualización (todos los campos opcionales), Omit<T, K> para creación (sin los campos que genera el servidor), Pick<T, K> para respuestas resumidas (solo algunos campos), y Record<K, V> para crear tipos de objeto con claves dinámicas como un mapa de permisos. ReturnType<F> y Awaited<T> son esenciales para inferir el tipo de retorno de funciones sin anotarlo manualmente.

interface Producto {
  id: number;
  nombre: string;
  precio: number;
  stock: number;
  descripcion: string;
}

// Partial<T> — todas las propiedades opcionales
type ActualizarProducto = Partial<Producto>; // Para PATCH en APIs

// Required<T> — todas las propiedades obligatorias
type ProductoCompleto = Required<Partial<Producto>>; // = Producto

// Readonly<T> — todas las propiedades readonly
type ProductoInmutable = Readonly<Producto>;

// Pick<T, K> — solo algunas propiedades
type ResumenProducto = Pick<Producto, "id" | "nombre" | "precio">;
// { id: number; nombre: string; precio: number }

// Omit<T, K> — todas excepto algunas
type ProductoSinId = Omit<Producto, "id">; // Para CREATE

// Record<K, V> — objeto con claves K y valores V
type Inventario = Record<string, number>;  // { [sku: string]: number }
type Permisos = Record<"leer" | "crear" | "editar" | "borrar", boolean>;

// Exclude<T, U> y Extract<T, U>
type NumoStr = string | number | boolean;
type SoloStrNum = Exclude<NumoStr, boolean>; // string | number
type SoloBool = Extract<NumoStr, boolean>;   // boolean

// ReturnType<F> y Parameters<F>
async function getUsuario(): Promise<Usuario> { return {} as Usuario; }
type TipoUsuario = Awaited<ReturnType<typeof getUsuario>>; // Usuario
type ParamsLogin = Parameters<typeof login>; // [email: string, pass: string]
Consejo🛠️ En APIs REST: usa Omit<T, "id" | "creadoEn"> para tipos de creación (POST), Partial<Omit<T, "id">> para actualización (PATCH), y Pick<T, "id" | "nombre"> para respuestas resumidas.
← GenericsMapped Types y Conditional Types →

Practica esta lección

Resuelve los ejercicios del curso de TypeScript en la app, gratis y con corrección automática.

Empezar a practicar