Comparte este artículo
Sébastien TIMONER
Experto en desarrollo web y gestión de equipos técnicos, me especializo en la creación y optimización de soluciones digitales de alto rendimiento. Gracias a un profundo dominio de tecnologías modernas como React.js, Node.js, TypeScript, Symfony, Docker y FrankenPHP, garantizo el éxito de proyectos SaaS complejos, desde el diseño hasta la implementación, para empresas de diversos sectores.
TypeScript ofrece numerosos tipos utilitarios que te permiten manipular los tipos de manera dinámica y práctica. Ya sea para hacer propiedades opcionales, inmutables o para filtrar ciertos campos de un tipo, estos utilitarios pueden ayudarte a escribir código más limpio, más seguro y más legible.
En este artículo, descubrirás algunos de los tipos utilitarios más comúnmente utilizados en TypeScript, con ejemplos concretos para mostrarte cómo y cuándo usarlos.
Partial<T>
El tipo utilitario Partial<T>
transforma todas las propiedades de un tipo T
en propiedades opcionales. Esto es particularmente útil cuando trabajas con objetos donde no siempre se necesitan todas las propiedades.
Imaginemos un tipo User
con propiedades obligatorias:
typescript
Si quieres crear una función que actualice un usuario, pero que solo necesite un subconjunto de estas propiedades, puedes usar Partial<User>
:
typescript
Gracias a Partial<User>
, ahora puedes actualizar solo algunas propiedades sin tener que proporcionar todas las demás.
Readonly<T>
Readonly<T>
hace que todas las propiedades de un tipo T
sean inmutables. Esto significa que una vez que el objeto es creado, no puedes modificar sus propiedades, lo cual es ideal para objetos constantes.
typescript
Al usar Readonly<Config>
, te aseguras de que config
permanezca inmutable durante toda la ejecución.
Pick<T, K>
El tipo utilitario Pick<T, K>
crea un nuevo tipo seleccionando solo ciertas propiedades de un tipo T
. Esto es útil cuando deseas crear un subtipo de un tipo existente.
typescript
Con Pick<User, "id" | "name">
, creas un tipo UserSummary
que contiene solo las propiedades id
y name
.
Omit<T, K>
Inversamente, Omit<T, K>
crea un nuevo tipo excluyendo ciertas propiedades de un tipo T
. Es lo opuesto a Pick
.
typescript
En este ejemplo, UserWithoutAddress
contiene todas las propiedades de User
, excepto address
.
Record<K, T>
Record<K, T>
se utiliza para crear un tipo de objeto donde las claves K
son de un tipo específico, y los valores son del tipo T
. Esto es útil para crear objetos asociativos, como diccionarios o mapeos.
Supongamos que quieres crear un objeto que asocie roles de usuario con permisos de acceso:
typescript
En este ejemplo, Record<Role, Permissions[]>
asegura que el objeto rolePermissions
contenga todas las claves admin
, user
, y guest
, con valores de tipo Permissions[]
.
Exclude<T, U>
Exclude<T, U>
permite crear un tipo excluyendo ciertos tipos de otro tipo. Es útil para filtrar tipos específicos de un Union Type
.
typescript
Usando Exclude<Status, "suspended">
, creas un tipo ActiveStatus
que no puede ser "suspended"
.
Los tipos utilitarios de TypeScript te permiten expresar tipos complejos de manera concisa y legible. Al aprovechar Partial
, Readonly
, Pick
, Omit
, Record
, y Exclude
, puedes manipular tus tipos de forma dinámica y responder a las necesidades de tu aplicación sin sobrecargar tu código.
Estos utilitarios son solo la punta del iceberg: TypeScript ofrece muchos otros tipos utilitarios avanzados. Tómate el tiempo de explorar estas herramientas, y tu código será más mantenible, más seguro y más fácil de leer.
Aplicando estos consejos, podrás manipular tus tipos de manera más eficiente y escribir código TypeScript aún más robusto. ¡Buen código!