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
и другими утилитами делает код гибче и безопаснее.