🇺🇸 EN
Frontend
·2 min read·↗·🇺🇸 EN

3 formas de transformar tipos en TypeScript

Portada principal del artículo: 3 formas de transformar tipos en TypeScript

Cuando usamos tipos o interfaces, el compilador de TypeScript se asegura de que el objeto cumpla exactamente con esa estructura para evitar errores en tiempo de ejecución por propiedades faltantes.

A veces queremos tener la flexibilidad de crear un objeto sin romper el contrato definido con la interfaz.

Por ejemplo, imagina que tenemos la interfaz User con todas sus propiedades obligatorias:

interface User {
  username: string;
  password: string;
  roles: string[];
  active: boolean;
}

Quizás queremos crear un usuario primero y más adelante llamar a la API para obtener sus roles. Si intentamos crear el objeto sin todas las propiedades requeridas, el compilador nos muestra un error porque no encaja con la interfaz.

Error del compilador por propiedades faltantes
Error del compilador por propiedades faltantes

En muchos casos, caemos en la tentación de cambiar la propiedad a opcional con roles?: string[] para que compile, pero en el fondo sabemos que es una trampa.

TypeScript nos ofrece herramientas para manejar este escenario:

Partial: crea un nuevo tipo donde todas las propiedades del tipo original se vuelven opcionales:

let admin: Partial<User> = {
  username: 'admin',
  password: 'admin'
}

Gracias a una aportación de @lukeshiru, aprendí otras formas de abordar esto:

Partial hace que absolutamente todas las propiedades sean opcionales, y muchas veces eso no es lo que queremos.

TypeScript también nos ofrece otros utility types como Omit y Pick. Vamos a ver cómo funcionan.

Omit: crea un nuevo tipo tomando todas las propiedades del tipo original y quitando las claves que especifiquemos.

type UserWithoutRoles = Omit<User, "roles">;
 
const userWithoutRoles: UserWithoutRoles = {
    username: "admin",
    password: "admin",
};

Pick: crea un nuevo tipo a partir de un tipo existente seleccionando únicamente un grupo de propiedades.

type UserWithStatus = Pick<User, "username" | "active">
 
const userWithStatus: UserWithStatus = {
    username: "dany",
    active: true
}

¡Muchas gracias de nuevo a @lukeshiru por el aporte! :)

Consulta más información sobre los Utility Types de TypeScript. Una vez que transformes tus tipos, es muy probable que también necesites validarlos en tiempo de ejecución: revisa mi guía práctica sobre cómo verificar tipos en TypeScript para aprender sobre type narrowing y custom type guards.

Lee más artículos en danywalls.com. Foto de Suzi Kim en Unsplash

Parte de la serie Frontend

Modern frontend development — Angular, React, TypeScript, accessibility, and performance.

Ver serie completa

Preguntas Frecuentes

¿Qué es el utility type Partial en TypeScript y cuándo debería usarlo?

Partial es un utility type de TypeScript que crea un nuevo tipo donde todas las propiedades del tipo original se vuelven opcionales. Lo usas cuando necesitas crear un objeto que solo tiene algunos de los campos definidos en una interfaz, como al armar los datos para una actualización parcial o al construir un objeto paso a paso antes de tener toda la información disponible.

¿Cuál es la diferencia entre Omit y Pick en TypeScript?

Omit crea un nuevo tipo tomando todas las propiedades de un tipo existente y eliminando las que especifiques por su nombre. Pick crea un nuevo tipo seleccionando únicamente las propiedades específicas que indiques. Usa Omit cuando quieras la mayor parte del tipo pero necesites excluir unos pocos campos, y usa Pick cuando solo necesites un subconjunto pequeño de propiedades de un tipo más grande.

¿Cómo creo un tipo en TypeScript que excluya ciertas propiedades de una interfaz?

Usa el utility type Omit escribiendo Omit seguido del tipo de origen y una unión con los nombres de las propiedades que quieres excluir. Por ejemplo, Omit con el tipo User y la propiedad roles generará un nuevo tipo con todas las propiedades de User excepto roles. El resultado es un objeto completamente tipado que el compilador validará como cualquier otro tipo.

¿Por qué debería usar utility types en TypeScript en lugar de hacer las propiedades opcionales con un signo de interrogación?

Hacer una propiedad opcional con un signo de interrogación cambia el contrato de la interfaz original de forma permanente, lo que puede ocultar errores en otras partes del código donde esa propiedad sí debería estar presente. Los utility types como Partial, Omit y Pick te permiten crear tipos derivados para casos de uso específicos sin modificar la interfaz base, manteniendo tus tipos precisos y tu código más seguro.

Artículos Relacionados

Compartir este artículo

Si esta guía te resultó útil, compártela con tu equipo o con otros desarrolladores.


Software real. Lecciones reales.

Comparto las lecciones que aprendí por las malas, para que puedas evitarlas o estar preparado cuando ocurran.

User avatar
User avatar
User avatar
User avatar
+13K

Únete a 13,800+ desarrolladores y lectores.

Cero spam. Cancela tu suscripción en cualquier momento.