Всем привет от ведущего разработчика из Cloud.ru! Как и обещал в предыдущей статье, продолжаю рассказывать про TypeScript-рецепты. Наши рецепты — это готовый код, который можно применить в конкретных ситуациях, а в некоторых случаях и подогнать ситуацию под код.
В этой статье предлагаю обсудить, как на обычном TypeScript приготовить такую функцию, которая из конфига роутинга по приложению вычислит объект, содержащий все пути внутри приложения. При этом сам объект роутинга будет иметь некоторую вложенность, а итоговая мапа с путями будет плоской структурой со значениями полей в виде строк. И всё это строго типизировано!
Задача. Решаем, что и как готовить
Итак, у нас есть некий конфиг с роутингом, который пока никак не типизирован:
const ROUTE_CONFIG = {
url: 'app',
id: 'root',
children: [
{
url: ':user',
id: 'user',
children: [
{
url: 'resource',
id: 'resource',
children: [
{ url: ':id', id: 'resourceId' },
],
},
],
},
{
url: 'settings',
id: 'settings',
},
],
}В идеальном мире мы бы хотели, чтобы такой объект был источником правды во всех вопросах внутри приложения — разработчик описал бы конфиг и нигде не дублировал информацию из него.
Давайте представим такую ситуацию: внутри приложения появляются ссылки на его внутренние страницы (знаю, случай редкий, но вдруг
