Код 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
- Сигнатура
asserts v is Config: после вызова без исключенияvсужается в вызывающем коде. - Assertion function должна быть объявлена через
functionили иметь явную аннотацию типа.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.
Предыдущий вопрос
Ответ API как union: loading, error, success
Следующий вопрос
Reducer корзины на discriminated union