> Что такое 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 также помогает избежать дублирования кода: вместо того чтобы объявлять новый интерфейс с частью полей, можно вывести его из существующего. Это делает код более поддерживаемым - при изменении исходного типа производные типы обновятся автоматически.

Пример кода

TYPESCRIPT
interface 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 нужны другие подходы

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью