Зачем нужны дженерики
Вопрос
Объясните, зачем нужны дженерики, если можно написать any.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Дженерик связывает типы: что пришло на вход, то и вернётся (или производное от него)
`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 ошибок.