Видеоуроки, интерактивный редактор и сохранение прогресса — бесплатно, сразу после входа.
ВойтиСоздать аккаунт — бесплатноЗакончили урок?
Войдите, чтобы отмечать прогресс
Для NonNullableOf<string | null> TypeScript раскладывает объединение и проверяет каждый член:
Результаты собираются обратно: string | never, то есть просто string. Теперь value строка, и toUpperCase вызывается без ошибки.
Только если слева от extends стоит голый параметр типа, T extends .... Если его во что-то завернуть, объединение проверяется целиком:
Во втором случае [string | null] не подходит под [null], и возвращается исходный тип целиком. Обёртка в кортеж это стандартный способ отключить распределение, когда оно мешает.
Наш тип это частный случай встроенного Exclude:
А для удаления null и undefined в стандартной библиотеке есть NonNullable<T>. Сейчас он объявлен как T & {}, но раньше был записан ровно так же, как в решении.
За 23 задания ты прошёл путь от identity<T> до типов, которые вычисляют другие типы. Почти всё, что встречается в типах реальных библиотек, собрано из этих кирпичиков: параметры, ограничения, keyof, индексный доступ, mapped и условные типы, infer. Если какой-то тип выглядит как шифр, его можно разобрать по частям, и каждая часть будет знакомой.