Видеоуроки, интерактивный редактор и сохранение прогресса — бесплатно, сразу после входа.
ВойтиСоздать аккаунт — бесплатноЗакончили урок?
Войдите, чтобы отмечать прогресс
T extends { length: number } читается как «T может быть любым типом, у которого есть числовое поле length». Теперь внутри функции value.length разрешён, а lengthOf(42) падает, и директива @ts-expect-error получает свою ошибку.
Строка, массив и обычный объект никак не связаны между собой, но все проходят:
TypeScript сравнивает типы по структуре: если у значения есть нужные поля нужного типа, оно подходит. Ни наследовать, ни объявлять что-то специально не требуется.
Слово то же, что у классов, но смысл другой. Здесь extends означает «является подтипом», то есть «подходит под описание». T extends string пропустит и string, и "Макс", а T extends object пропустит любой объект или массив.
В этой функции дженерик на самом деле не обязателен:
Работает так же, потому что T нигде больше не используется. Дженерик с ограничением становится нужен, когда тип значения важно не потерять, например вернуть его наружу. Про это задание 7.