Видеоуроки, интерактивный редактор и сохранение прогресса — бесплатно, сразу после входа.
ВойтиСоздать аккаунт — бесплатноЗакончили урок?
Войдите, чтобы отмечать прогресс
Ограничение у класса действует во всех его методах: внутри byId компилятор знает, что у каждого item есть числовой id. Снаружи new Registry<string>() больше не проходит: «Type 'string' does not satisfy the constraint '{ id: number; }'».
Как и в задании 7, ограничение только проверяет, а не сужает. byId возвращает T, поэтому у found тип { id: number; name: string } | undefined, и после проверки на undefined можно читать found.name.
Если одно и то же ограничение встречается во многих местах, его удобно назвать:
Так сразу видно, что все эти сущности работают с одним контрактом, и менять его придётся в одном месте.
Можно отказаться от дженерика и хранить WithId[]. Тогда byId будет возвращать WithId, и name у найденного элемента пропадёт. Дженерик с ограничением снова нужен, чтобы и потребовать id, и сохранить остальные поля.