Sobes.tech
Назад к вопросам
Middle
3

Как часто приходилось работать с дженериками? Где использовал утилитные типы: Pick, Omit, Partial, Record, ReturnType, Exclude?

Компании, где спрашивали
UserGate

Ответ от нейросети

sobes.tech AI

Дженерики и утилитные типы в TypeScript позволяют создавать гибкие и переиспользуемые типы, что значительно улучшает качество и безопасность кода.

Опыт использования:

  • Дженерики часто применяю при написании компонентов React, чтобы типизировать пропсы с разными типами данных.
  • Утилитные типы использую для трансформации типов без дублирования кода.

Примеры использования утилитных типов:

  • Pick<T, K> — выбирает из типа T только свойства K. Например, для создания типа с частью полей интерфейса.
  • Omit<T, K> — наоборот, исключает свойства K из типа T.
  • Partial<T> — делает все свойства типа T необязательными, удобно для обновления объектов.
  • Record<K, T> — создает объект с ключами K и значениями типа T, полезно для маппинга.
  • ReturnType<T> — извлекает тип возвращаемого значения функции T.
  • Exclude<T, U> — исключает из типа T все типы, которые совместимы с U.

Пример:

interface User {
  id: number;
  name: string;
  email: string;
}

// Создаем тип с только id и name
type UserPreview = Pick<User, 'id' | 'name'>;

// Тип с необязательными полями для обновления
type UserUpdate = Partial<User>;

// Функция, возвращающая User
function getUser(): User {
  return { id: 1, name: 'Alice', email: 'alice@example.com' };
}

// Тип возвращаемого значения функции
type UserType = ReturnType<typeof getUser>;