Код Middle Объединения и сужение обновлено

Assertion function для конфига

Условие

Напиши assertion function assertConfig(v: unknown): asserts v is Config, где Config = { port: number; host: string; tls?: { cert: string; key: string } }. Если значение не подходит, она бросает Error с сообщением config.<путь>: <что ожидалось>:

  • config: object, если это не объект;
  • config.port: integer 1-65535;
  • config.host: string;
  • config.tls: object, config.tls.cert: string, config.tls.key: string.

check(v) в заготовке вызывает её и, если всё хорошо, возвращает строку адреса (типы уже сужены после вызова).

Примеры

check({"port":8080,"host":"localhost"}) // "http://localhost:8080"
check({"port":443,"host":"api","tls":{"cert":"c","key":"k"}}) // "https://api:443"
check("x") // "config: object"

Как подойти

Подсказки: 2
  1. Сигнатура asserts v is Config: после вызова без исключения v сужается в вызывающем коде.
  2. Assertion function должна быть объявлена через function или иметь явную аннотацию типа.

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

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