Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про TypeScript: generic, constraint, typescript

Как ограничить generic ключами объекта (keyof)?

Вопрос проверяет умение использовать ограничения generic-параметров для построения типобезопасных API.

Короткий ответ

Generic ограничивают ключами объекта с помощью конструкции K extends keyof T. Это гарантирует, что K может быть только одним из ключей объекта T. Такой подход позволяет связать тип ключа с типом возвращаемого значения и получить точную типизацию. Это базовый и самый распространённый паттерн в TypeScript.

Длинный ответ

Ограничение generic — это способ сказать компилятору, какие значения допустимы.

Определение

Generic constraint — ограничение на параметр типа с помощью extends.

Базовый пример

function getValue<T, K extends keyof T>(obj: T, key: K): T[K] {
  return obj[key];
}

Что здесь происходит

  1. T — тип объекта.

  2. K — тип ключа.

  3. K extends keyof T — ключ может быть только существующим.

  4. T[K] — тип значения зависит от ключа.

Пример использования

const settings = {
  theme: "dark",
  retry: 3,
};

getValue(settings, "theme"); // string
getValue(settings, "retry"); // number
getValue(settings, "url");   // ошибка

Зачем это нужно

  1. Защита от опечаток.

  2. Корректные типы без as.

  3. Улучшенное автодополнение.

  4. Безопасные универсальные утилиты.

Расширенный пример: запись значения

function setValue<T, K extends keyof T>(
  obj: T,
  key: K,
  value: T[K]
) {
  obj[key] = value;
}

Поведение

setValue(settings, "retry", 5);     // ok
setValue(settings, "retry", "5");   // ошибка

Вывод

Ограничение generic через K extends keyof T — фундаментальный приём TypeScript для построения строгих и безопасных API при работе с объектами.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • TypeScript

    TypeScript

Ключевые слова

#generic

#constraint

#typescript

Подпишись на React Developer в телеграм