PassFront
  1. PassFront
  2. База знаний
  3. Дженерики

Как ограничить дженерик через extends и keyof?

Дженерики

`extends` задаёт, какому типу должен соответствовать параметр, а `keyof` даёт объединение ключей объекта.

Безопасный доступ к свойству

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

const user = { id: 1, name: 'Ann' };
getProp(user, 'name'); // string
getProp(user, 'age');  // ошибка: такого ключа нет

Здесь K ограничен ключами T, а результат T[K] получает точный тип значения.

Ограничение по форме

function merge<A extends object, B extends object>(a: A, b: B): A & B {
  return { ...a, ...b };
}

Значения по умолчанию

interface ApiResponse<T = unknown> { data: T; status: number }

Коротко для собеседования

T extends X требует нужной формы типа, K extends keyof T гарантирует существующий ключ, а T[K] возвращает его точный тип.

Другие вопросы раздела