El tipo utilitario Pick<T, K> se agregó en TypeScript para resolver la tarea de copiar selectivamente parte de los campos de un tipo o interfaz existente.
A menudo, durante el desarrollo, se reutilizan las mismas estructuras de datos con ligeras variaciones. Antes de la aparición de Pick, era necesario crear nuevas interfaces copiando manualmente los campos necesarios, lo que llevaba a la duplicación de código y a errores al modificar las estructuras originales.
Es necesario tipificar los datos de entrada o salida de una función, utilizando solo una parte de los campos de una gran interfaz, para evitar redundancias y especificar al máximo el contrato.
Pick resuelve la tarea de seleccionar un subconjunto de propiedades del tipo T por las claves K:
type Pick<T, K extends keyof T> = { [P in K]: T[P] };
Ejemplo:
interface User { id: number; name: string; email: string; } type Credentials = Pick<User, 'email' | 'name'>; const creds: Credentials = { email: "user@example.com", name: "User Name", };
Características clave:
¿En qué se diferencia Pick de Omit?
Pick selecciona solo los campos enumerados del tipo; Omit, por el contrario, los excluye de la estructura.
type PartialUser = Omit<User, 'id'>; // Todos los campos excepto id
¿Se puede usar Pick para seleccionar una propiedad que no existe?
No, las claves K deben ser necesariamente claves del tipo original, de lo contrario, habrá un error de compilación.
¿Puede Pick afectar la opcionalidad o los campos readonly?
Pick conserva los modificadores de propiedad (optional, readonly) si estaban en el tipo original, solo los copia en el nuevo.
Al trabajar con un formulario de entrada de datos, el desarrollador describió su propio tipo manualmente, olvidando el nuevo atributo obligatorio agregado en User. El formulario dejó de funcionar después de la actualización de la interfaz.
Ventajas:
Desventajas:
Se utiliza Pick para seleccionar los campos necesarios del formulario:
type FormFields = Pick<User, 'email' | 'name'>;
Los cambios en User se reflejan automáticamente en el formulario.
Ventajas:
Desventajas: