Код 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
  1. Бренд через unique symbol нельзя подделать литералом объекта.
  2. Приведение s as UserId допустимо только внутри парсера, после проверки.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.