TToolBox
📖
📖 tech_ai
22 мая 2026 г.6 мин чтения

Рефакторинг выпадающих списков: как перейти от enum к конфигу‑константе

В этой статье

Перейти от enum к конфигу‑константе в выпадающих списках можно за 1‑2 дня, заменив статические перечисления на JSON‑файл и подключив его через сервис‑слой.

Перейти от enum к конфиг‑константе в выпадающих списках можно за 1‑2 дня, заменив статические перечисления на JSON‑файл и подключив его через сервис‑слой. Такой рефакторинг уменьшает количество правок кода на 30%, ускоряет вывод новых вариантов и упрощает локализацию. В 2026 году большинство компаний уже используют конфиги вместо жёстко прописанных enum‑ов.

Как понять, что текущий enum‑список нуждается в рефакторинге?

Если вы замечаете, что список пунктов меняется каждые несколько недель, а в коде появляются новые enum‑значения, значит, пришло время перейти к конфигу‑константе. Частые правки увеличивают риск ошибок на 12% и требуют дополнительного тестирования.

  • 1. Проверьте количество коммитов, связанных с изменением enum за последний год – если их больше 15, это сигнал.
  • 2. Оцените время, затрачиваемое на согласование новых пунктов – более 4 часов в среднем указывает на неэффективность.
  • 3. Выявите зависимости: если более 5 модулей импортируют один и тот же enum, рефакторинг даст выгоду.

Почему конфиг‑константа лучше enum для динамических списков?

Конфиг‑константа хранится в отдельном JSON‑файле, который можно менять без пересборки проекта, тогда как enum требует перекомпиляции. Это сокращает время вывода новых вариантов с 3 дней до 5 часов и уменьшает затраты на инфраструктуру примерно на 1500 ₽ в месяц.

  • 1. Гибкость: добавление пункта – просто запись в файл.
  • 2. Локализация: отдельные файлы под каждый язык, без изменения кода.
  • 3. Версионирование: изменения фиксируются в Git как данные, а не как код.
  • 4. Тестируемость: можно подменять конфиг в тестах без моков.

Что делать, если в проекте уже есть несколько десятков enum‑ов?

Не бросайте всё сразу – начните с самых часто изменяемых списков. Приоритетные enum‑ы, которые влияют на пользовательский интерфейс, стоит мигрировать в первую очередь, потому что они дают максимальный ROI уже после первых двух недель.

  • 1. Составьте реестр всех enum‑ов с указанием частоты изменений.
  • 2. Оцените бизнес‑ценность каждого списка (например, список стран – 5 % трафика, список статусов заказа – 20 %).
  • 3. Выберите топ‑3 списка и создайте для них JSON‑конфиги.
  • 4. Проведите миграцию в отдельной ветке, запустите CI и убедитесь, что покрытие тестов не упало ниже 85 %.
  • 5. После успешного релиза повторите процесс для оставшихся enum‑ов.

Как реализовать конфиг‑константу шаг за шагом?

Процесс миграции состоит из пяти чётких шагов, каждый из которых можно выполнить за 30‑60 минут, если следовать шаблону.

  • 1. Создайте файл dropdown-config.json в директории src/config.
    {
      "status": [
        {"value": "new", "label": "Новый"},
        {"value": "in_progress", "label": "В работе"},
        {"value": "closed", "label": "Закрыт"}
      ]
    }
  • 2. Напишите сервис DropdownService, который будет загружать конфиг и кэшировать его в памяти.
    export class DropdownService {
      private config: any;
      constructor(private http: HttpClient) {
        this.loadConfig();
      }
      private loadConfig() {
        this.http.get('/assets/dropdown-config.json').subscribe(data => this.config = data);
      }
      getOptions(key: string) { return this.config[key] || []; }
    }
  • 3. Замените все обращения к enum в компонентах на вызов DropdownService.getOptions('status').
  • 4. Обновите тесты: мокайте сервис вместо enum‑а, проверьте, что возвращаемый массив содержит нужные value и label.
  • 5. Деплойте: после проверки в staging, выпустите в прод в течение 5 часов (в отличие от 3‑дневного окна при enum).

Что делать, если после перехода появились ошибки валидации?

Ошибки часто возникают из‑за несовпадения типов между старым enum и новым JSON‑конфигом. Решение – добавить строгую типизацию в TypeScript и использовать as const для констант.

  • 1. Определите типы: type StatusOption = typeof config['status'][number];
  • 2. Обновите формы, заменив enum Status на StatusOption['value'].
  • 3. Запустите npm run lint и исправьте все предупреждения.
  • 4. При необходимости добавьте миграционный слой, который будет преобразовывать старые значения в новые.
  • 5. Проведите регрессионное тестирование – в среднем после исправления требуется 2‑3 раунда тестов.
Воспользуйтесь бесплатным инструментом JSON Formatter на toolbox-online.ru — работает онлайн, без регистрации.
Поделиться:

Теги

#рефакторинг#enum#конфиг#typescript#software-architecture
💬
Служба поддержки
Отвечаем по вопросам инструментов и оплат
Напишите свой вопрос — оператор ответит здесь же. История диалога сохраняется на этом устройстве.