Ответ вслух Junior Дженерики спрашивают часто обновлено

Зачем нужны дженерики

Вопрос

Объясните, зачем нужны дженерики, если можно написать any.

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

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

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

Коротко

Дженерик это параметр типа. Он нужен, чтобы описать функцию, которая работает с разными типами и при этом сохраняет связь между ними. first<T(arr: T[]): T обещает, что из массива строк вернётся строка, а из массива пользователей пользователь.

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

  • Дженерик связывает типы: что пришло на вход, то и вернётся (или производное от него)

  • `any` теряет эту связь и выключает проверку

  • Ограничения `extends` позволяют пользоваться свойствами параметра безопасно

  • `K extends keyof T` и `T[K]` дают точные типы для доступа по ключу

  • Пример из практики: типизированный API-клиент, хук, компонент списка `List<T>`

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

  • Чем T отличается от unknown в параметре?
  • Как типизировать дженерик-компонент в React?
  • Что значит дженерик с одним вхождением?

Разбор

Дженерик это параметр типа. Он нужен, чтобы описать функцию, которая работает с разными типами и при этом сохраняет связь между ними. first<T>(arr: T[]): T обещает, что из массива строк вернётся строка, а из массива пользователей пользователь. С any функция тоже примет любой массив, но вернёт any, и дальше компилятор ничего не проверит. С ограничением T extends { id: number } внутри можно читать id, а связка K extends keyof T с результатом T[K] даёт точный доступ по ключу без опечаток. В React так типизируют компонент List<T> с items: T[] и renderItem: (item: T) => ReactNode, а в API-клиенте request<T>(). Правило: если T встречается в сигнатуре один раз, он ничего не связывает, и лучше unknown.

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

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

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