Tipos utilitarios de TypeScript que deberías conocer

¿Conoces todos los utility types que TypeScript trae de serie? Aprende a usar Partial, Required, Pick, Omit, Readonly y ReturnType con ejemplos prácticos.


TypeScript incluye una colección de tipos utilitarios que transforman tipos existentes de maneras muy útiles. Son herramientas que evitan repetir definiciones y hacen el código más expresivo.

Partial<T>

Convierte todas las propiedades de un tipo en opcionales.

interface User {
  name: string;
  email: string;
  age: number;
}

const updateUser = (user: User, changes: Partial<User>): User => {
  return { ...user, ...changes };
};

updateUser({ name: 'Alex', email: 'alex@email.com', age: 30 }, { age: 31 });

Required<T>

Lo contrario: convierte todas las propiedades en obligatorias.

interface Config {
  theme?: string;
  lang?: string;
}

const applyConfig = (config: Required<Config>) => {
  // theme y lang son ahora obligatorios
};

Pick<T, K>

Selecciona solo las propiedades que necesitas de un tipo.

type UserPreview = Pick<User, 'name' | 'email'>;
// { name: string; email: string }

const showCard = (user: UserPreview) => {
  console.log(user.name, user.email);
};

Omit<T, K>

Lo opuesto a Pick: elimina propiedades específicas.

type UserWithoutAge = Omit<User, 'age'>;
// { name: string; email: string }

Pick y Omit son complementarios. Usa Pick cuando quieres pocas propiedades, Omit cuando quieres casi todas excepto alguna.

Readonly<T>

Hace que ninguna propiedad pueda modificarse tras la inicialización.

const config: Readonly<Config> = { theme: 'dark', lang: 'es' };

config.theme = 'light'; // ❌ Error: Cannot assign to 'theme' because it is a read-only property

Muy útil para configuraciones y constantes que no deberían mutar.

ReturnType<T>

Extrae automáticamente el tipo de retorno de una función.

const getUser = () => ({ name: 'Alex', age: 30 });

type UserReturn = ReturnType<typeof getUser>;
// { name: string; age: number }

Evita duplicar la definición del tipo cuando ya lo infiere la función.


Estos seis utility types cubren la mayoría de los casos del día a día. TypeScript tiene más (Record, Exclude, Extract, NonNullable...) pero dominar estos es el punto de partida para sacarle partido real al sistema de tipos sin repetir código.

Te puede interesar