Utility Type Pick в TypeScript
Pick — это utility тип в TypeScript, который позволяет «выбрать» конкретные свойства из существующего типа или интерфейса. Он создаёт новый тип, включающий лишь те поля, которые вы явно указали.
Синтаксис
Pick<T, K>
- T- исходный тип или интерфейс, из которого нужно выбрать свойства.
- K— объединение (union) ключей, которые вы хотите оставить в результирующем типе.
Pick берёт только перечисленные свойства K из T, а все остальные игнорирует.
Когда использовать Pick?
- Если нужно создать новый объектный тип с ограниченным числом свойств.
- Для API-запросов, когда не требуется отправлять все данные.
- В React-пропсах, когда компоненту нужен только определенный набор данных.
Пример использования Pick
Допустим, у нас есть интерфейс User с несколькими полями:
interface User {
  id: number;
  name: string;
  age: number;
  isAdmin: boolean;
}
Если нам нужен тип, в котором мы хотим хранить только id и name, мы можем воспользоваться Pick:
type BasicUserInfo = Pick<User, "id" | "name">;
const userInfo: BasicUserInfo = {
    id: 1,
    name: "Alice",
};
userInfo.age = 25;       
// Ошибка: свойство 'age' отсутствует в типе 'Pick<User, "id" | "name">'
- BasicUserInfoсодержит только поля- idи- name.
- Попытка обратиться к ageилиisAdminприведёт к ошибке на этапе компиляции, так как их нет в результирующем типе.
Пример с API
При получении данных о пользователе из API иногда хочется вернуть наружу только минимальный набор полей, не раскрывая всего внутреннего устройства объекта. Например:
interface User {
    id: number;
    name: string;
    email: string;
    passwordHash: string;
    isAdmin: boolean;
}
// Создадим публичный профиль (только безопасная часть данных)
type PublicUserProfile = Pick<User, "id" | "name">;
function getPublicProfile(user: User): PublicUserProfile {
    return {
        id: user.id,
        name: user.name,
    };
}
Таким образом, функция getPublicProfile возвращает только те поля id и name, которые мы явно указали в PublicUserProfile.
Зачем нужен Pick?
- Сокращение типов: Если вы работаете с большим интерфейсом, а в определённом контексте вам нужны только несколько свойств, Pickпозволяет избежать дублирования кода при определении типов, повторно используя существующие структуры.
- Гибкость: Позволяет динамически переиспользовать общие структуры данных (например, при работе с API), выбирая только нужные поля для определённой операции.
- Контроль: Избегаете случайной передачи лишних данных или нежелательных свойств.
Сравнение с Omit
| Утилита | Описание | 
|---|---|
| Pick<T, K> | Оставляет только указанные свойства KизT | 
| Omit<T, K> | Исключает указанные свойства KизT, оставляя остальные | 
Итог
- Pickпомогает формировать подтипы, оставляя только нужные свойства.
- Уменьшает дублирование кода и снижает риск ошибок при передаче данных.
- В сочетании с Omitи другими утилитами делает код гибче и безопаснее.