> Что такое Pick в TypeScript и как его использовать? (TypeScript)
Уровень: junior · Роль: frontend · Категория: Технические вопросы
Компании: TYMY
Стек: TypeScript
> Пример ответа
Короткий ответ
Pick<T, K> - это встроенный utility type в TypeScript, который создаёт новый тип, выбирая из исходного типа T только указанные свойства K. Используется для создания подтипов, когда нужно ограничить набор полей. Например, Pick<User, 'id' | 'name'> даст тип только с полями id и name. Это удобно для передачи части данных между функциями или компонентами.
Подробное объяснение
Pick реализован как mapped type: он перебирает ключи из K, которые должны быть подмножеством ключей T, и для каждого создаёт свойство с тем же типом, что и в исходном типе. Если указать ключ, которого нет в T, TypeScript выдаст ошибку на этапе компиляции. Это гарантирует типобезопасность.
Pick часто применяется в ситуациях, когда:
- нужно передать только часть объекта в функцию или компонент
- требуется скрыть избыточные поля при работе с API
- создаётся интерфейс для формы редактирования, где доступны не все поля
Pick работает как с интерфейсами, так и с типами. Он не изменяет модификаторы свойств (readonly, optional) - они наследуются из исходного типа.
На практике
В реальных проектах Pick часто используют вместе с другими utility types, например Partial<Pick<T, K>> для создания типа частичного обновления. Это особенно полезно в Redux reducers или при работе с формами.
Pick также помогает избежать дублирования кода: вместо того чтобы объявлять новый интерфейс с частью полей, можно вывести его из существующего. Это делает код более поддерживаемым - при изменении исходного типа производные типы обновятся автоматически.
Пример кода
TYPESCRIPTinterface User {id: number;name: string;email: string;password: string;createdAt: Date;}// Тип только с публичными даннымиtype PublicUser = Pick<User, 'id' | 'name' | 'email'>;// Использование в функцииfunction displayUserInfo(user: PublicUser) {console.log(`${user.name} (${user.email})`);}// Тип для формы редактирования (только изменяемые поля)type EditableUserFields = Pick<User, 'name' | 'email'>;// Комбинация с Partial для частичного обновленияtype PartialUpdate = Partial<Pick<User, 'name' | 'email'>>;function updateUser(id: number, updates: PartialUpdate) {// обновление только переданных полей}
Как отвечать на собеседовании
Начни с краткого определения, затем приведи синтаксис и пример использования. Объясни, что K должен быть подмножеством ключей T. Упомяни, что Pick - это mapped type, и покажи понимание его внутреннего устройства. Добавь про типичные сценарии использования: передача части данных, создание подтипов для форм или API. Если спросят про альтернативы, упомяни Omit (противоположная операция).
Что проверяет интервьюер
Интервьюер оценивает:
- понимание utility types и их назначения
- знание синтаксиса и ограничений (ключи должны быть из исходного типа)
- способность применять
Pickв реальных сценариях - понимание разницы между
PickиOmit - знание, что
Pickработает на уровне типов, а не runtime
Типичные ошибки
- Попытка использовать
Pickс ключами, которых нет в исходном типе - будет ошибка компиляции - Путаница с
Omit:Pickвыбирает указанные ключи,Omitисключает их - Забывают, что
Pickнаследует модификаторы (readonly, optional) - если нужно их убрать, используют дополнительные utility types - Использование
Pickс union types вместо объектов - это не сработает, для union types нужны другие подходы
> Похожие задачи по frontend
Какие альтернативы использованию infer в TypeScript для типизации ключей?
Что такое Record в TypeScript и как его использовать?
Нужно ли добавлять Promise к выходному типу асинхронной функции в TypeScript
Что такое public в TypeScript?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью