Код Middle Базовые типы обновлено
Branded id: не перепутать UserId и OrderId
Условие
Опиши branded-типы UserId и OrderId (строки с префиксами usr_ и ord_ и минимум 4 символами после префикса из [a-z0-9]) и парсеры:
parseUserId(s: string): UserId | null;parseOrderId(s: string): OrderId | null.
Напиши ordersOf(user: UserId, orders: { id: OrderId; userId: UserId }[]): OrderId[]. Теперь вызов ordersOf(orderId, ...) не скомпилируется. demo в заготовке парсит сырые строки из запроса.
Примеры
demo("usr_ann1", [["ord_0001", "usr_ann1"], ["ord_0002", "usr_bob2"], ["ord_0003", "usr_ann1"]]) // ["ord_0001", "ord_0003"]
demo("ord_0001", []) // "bad user id"
demo("usr_ab", []) // "bad user id"
Как подойти
Подсказки: 2
- Бренд через
unique symbolнельзя подделать литералом объекта. - Приведение
s as UserIdдопустимо только внутри парсера, после проверки.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.