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