Ответ
Pick — это утилитарный тип в TypeScript, который создаёт новый тип, выбирая только указанные свойства из существующего типа.
Синтаксис:
type Pick<T, K extends keyof T> = {
[P in K]: T[P];
};
Пример:
interface User {
id: number;
name: string;
age: number;
email: string;
}
type UserPreview = Pick<User, 'id' | 'name'>;
// Результат: { id: number; name: string }
Используется, когда нужно создать тип с подмножеством свойств исходного типа. Особенно полезно для DTO, когда нужно передавать только часть данных.
Ответ 18+ 🔞
А, ну это ж Pick, блядь! Тип такой в TypeScript, который как хитрая жопа — выковыривает только то, что тебе надо из кучи всякого хлама.
Смотри, вот есть у тебя интерфейс, ну там User, с кучей полей: id, name, age, email... Овердохуища всего. А тебе, допустим, для превьюшки на фронте нужны только id да name. Ну не тащить же всю эту простыню, ёпта!
Вот тут-то наш Pick и выручает, как мудя. Берёт он исходный тип T и ключи K, которые обязательно должны быть в этом самом T (это вот K extends keyof T значит). И строит новый тип, где оставляет только выбранные тобой поля.
interface User {
id: number;
name: string;
age: number;
email: string;
}
type UserPreview = Pick<User, 'id' | 'name'>;
// Результат: { id: number; name: string }
Вот и всё, пидарас шерстяной! Получился UserPreview — лёгкий такой, стройный, без лишнего жира. Идеально для DTO, когда нужно отправить на клиент не всю сущность, а только кусочек, чтобы трафик не ебать.
Под капотом-то там магия простая:
type Pick<T, K extends keyof T> = {
[P in K]: T[P]; // Берёт каждый ключ P из K и ставит ему тип такой же, как в оригинальном T[P]
};
В общем, вещь, блядь, полезная. Чихать на всё ненужное и выбирать только самое сокровенное. Как в жизни, внатуре.