Видеоуроки, интерактивный редактор и сохранение прогресса — бесплатно, сразу после входа.
ВойтиСоздать аккаунт — бесплатноЗакончили урок?
Войдите, чтобы отмечать прогресс
Возвращаемый тип T вместо { name: string }. Для вызова save({ name: "Макс", age: 30 }) это { name: string; age: number }, и .age читается без проблем.
Полезно разделять, что делает каждая часть сигнатуры:
T extends { name: string } это проверка на входе: без name не пустит.T в типе результата это обещание на выходе: вернётся то же, что пришло.Если на выходе написать само ограничение, функция становится «воронкой»: принимает богатый объект, а отдаёт обеднённый.
В задании 4 было замечено, что lengthOf прекрасно работает без дженерика. Здесь без него не обойтись:
Такая функция теряет лишние поля, и исправить это без T нельзя. Дженерик с ограничением нужен ровно тогда, когда функция должна и требовать что-то от типа, и сохранить его целиком.