Omit y Pick Type
Clase 17 de 22 • Curso de TypeScript: Tipos Avanzados y Funciones
Resumen
Los tipos Omit y Pick en TypeScript son utility types que te permiten crear un nuevo tipo basado en un tipo existente, pero omitiendo o seleccionando algunas de las propiedades del tipo original.
Omit en TypeScript
Utilizamos la siguiente expresión para definir un Omit: Omit<T, K>. Con esto generamos un nuevo tipo que tiene todas las propiedades de T excepto las especificadas en K. Veamos ejemplo en código:
interface User {
id: number;
name: string;
email: string;
phoneNumber: string;
}
// Usando `Omit` para omitir ciertas propiedades de la interfaz User
type UserWithoutContact = Omit<User, 'email' | 'phoneNumber'>; // 👈 Nuevo tipo
// `UserWithoutContact` es ahora un tipo con las propiedades `id` y `name`, pero sin `email` ni `phoneNumber`.
let user: UserWithoutContact = {
id: 1,
name: 'Carlos Araujo',
};
console.log(user); // { id: 1, name: 'Carlos Araujo' }
En este caso, hemos usado Omit para excluir las propiedades email y phoneNumber de la interfaz User. Por lo tanto, el nuevo tipo UserWithoutContact solo tiene las propiedades id y name.
Pick en TypeScript
Empleamos la siguiente expresión para definir un Pick: Pick<T, K>. Con esto producimos un nuevo tipo que solo tiene las propiedades de T que se especifican en K. Veamos ejemplo en código:
interface User {
id: number;
name: string;
email: string;
phoneNumber: string;
}
// Usando `Pick` para seleccionar ciertas propiedades de User
type UserContactInfo = Pick<User, 'email' | 'phoneNumber'>;
// `UserContactInfo` es ahora un tipo con solo las propiedades `email` y `phoneNumber`
let contactInfo: UserContactInfo = {
email: "user@email.com",
phoneNumber: "653-951-802"
};
console.log(contactInfo); // { email: "user@email.com", phoneNumber: "653-951-802" }
En este caso, hemos empleado Pick para seleccionar las propiedades email y phoneNumber de la interfaz User. Por lo tanto, el nuevo tipo UserContactInfo solo tiene los atributos email y phoneNumber.
Contribución creada por: Martín Álvarez (Platzi Contributor).