Выбор ответа Junior Дженерики обновлено
Ограничение extends
Вопрос
Какой вызов не скомпилируется?
function longest<T extends { length: number }>(a: T, b: T): T {
return a.length >= b.length ? a : b;
}
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: longest(10, 20). T extends { length: number } требует от аргумента числового поля length.
Варианты ответа
longest(10, 20)правильный ответlongest({ length: 1 }, { length: 2 })longest('abc', 'de')longest([1], [2, 3])
Разбор
T extends { length: number } требует от аргумента числового поля length. У строк, массивов и объекта { length: 1 } оно есть, у числа нет, поэтому longest(10, 20) даёт ошибку.
Объект с полем length подходит благодаря структурной типизации, и это частая ловушка: кандидаты думают, что ограничение пропускает только массивы и строки.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.