Код Middle Дженерики обновлено
partition с type guard
Условие
Напиши partition с двумя перегрузками:
partition<T, S extends T>(items: readonly T[], pred: (x: T) => x is S): [S[], Exclude<T, S>[]]: если передан type guard, обе части сужаются;partition<T>(items: readonly T[], pred: (x: T) => boolean): [T[], T[]].
Функция splitPayments в заготовке делит платежи на успешные и неуспешные через guard isPaid и возвращает суммы обеих частей.
Примеры
splitPayments([{"status":"paid","amount":100,"paidAt":"x"}, {"status":"failed","amount":50,"reason":"no funds"}, {"status":"paid","amount":30,"paidAt":"y"}]) // {"paid":130,"reasons":["no funds"]}
splitPayments([]) // {"paid":0,"reasons":[]}
splitPayments([{"status":"failed","amount":1,"reason":"a"}, {"status":"failed","amount":2,"reason":"b"}]) // {"paid":0,"reasons":["a","b"]}
Как подойти
Подсказки: 2
- Реализация одна, перегрузки только описывают типы.
- Порядок перегрузок важен: сначала более узкая с type guard.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.