Код Junior Объединения и сужение спрашивают часто обновлено
isDefined: filter, который сужает тип
Условие
Напиши type guard isDefined<T>(v: T): v is NonNullable<T> и используй его в activeEmails(users): вернуть отсортированный список email активных пользователей, у которых email есть (поле может быть null или отсутствовать).
Цель по типам: users.map(u => u.email).filter(isDefined) должен иметь тип string[], без as и без !.
Примеры
activeEmails([{"name":"a","active":true,"email":"b@x.ru"}, {"name":"b","active":true,"email":null}, {"name":"c","active":false,"email":"c@x.ru"}, {"name":"d","active":true,"email":"a@x.ru"}]) // ["a@x.ru", "b@x.ru"]
activeEmails([]) // []
activeEmails([{"name":"a","active":true}]) // []
Как подойти
Подсказки: 2
.filter(Boolean)выкинет и пустую строку, и до TS 5.5 не сужал тип.- Проверяй именно
nullиundefined.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Предыдущий вопрос
Reducer корзины на discriminated union
Следующий вопрос
Безопасный парсинг JSON в тип через type guard