Ответ вслух Middle Дженерики обновлено

Дженерики

Вопрос

Зачем нужны дженерики и что такое ограничение типа?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Дженерик сохраняет связь между типом входа и выхода. function first<T(a: T[]): T возвращает элемент того же типа, а не any. Ограничение через extends сужает допустимое: <T extends { id: string } гарантирует наличие поля.

Что должно прозвучать в ответе

  • позволяют сохранить связь между входом и выходом

  • без них пришлось бы возвращать any и терять тип

  • extends задаёт ограничение на параметр типа

  • keyof в паре с дженериком даёт типобезопасный доступ по ключу

  • параметр можно вывести из аргумента - явно указывать не обязательно

  • лишние параметры типа усложняют без пользы

Что могут спросить следом

  • Что такое infer и где применяется
  • Как типизировать функцию, принимающую массив и ключ
  • Когда параметр типа лишний

Разбор

Дженерик сохраняет связь между типом входа и выхода. function first<T>(a: T[]): T возвращает элемент того же типа, а не any.

Ограничение через extends сужает допустимое: <T extends { id: string }> гарантирует наличие поля. Связка с keyof даёт типобезопасный доступ:

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

Здесь опечатка в имени ключа станет ошибкой компиляции, а тип результата выведется точно.

Важное «не надо»: параметр типа, который используется один раз, обычно лишний - он усложняет сигнатуру и ничего не связывает.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме