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.

Next.js 16 renombra middleware.ts a proxy.ts: mismo runtime edge, pero un nombre que refleja lo que realmente hace — interceptar y reescribir peticiones antes de llegar a tus rutas.

Next.js 16 llega con Turbopack estable, params/searchParams totalmente async y el cambio de middleware a proxy. Repaso los pasos y el codemod para migrar sin sustos.