Цикл по значениям TypeScript Enum без индексов: решение

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

JS
Скопировать код
// У нас имеется шикарное перечисление 'Colors'
const Colors = { RED: 'Красный', GREEN: 'Зелёный', BLUE: 'Синий' };

// Отдохните и наслаждайтесь волшебством
const radios = Object.entries(Colors).map(([key, value]) =>
  `<label><input type="radio" name="color" value="${key}">${value}</label>`
).join('');

// На бис! 'radios' теперь — это HTML-строка для ваших радиокнопок
Кинга Идем в IT: пошаговый план для смены профессии

Типы перечислений и особенности итераций

В обольщающем мире TypeScript присутствуют два типа перечислений: числовые и строковые. Важно не забывать, что их работа после компиляции в JavaScript отличается.

Итерация по числовому перечислению

JS
Скопировать код
// Знакомьтесь, перечисление Фрукты: Яблоко, Апельсин и Банан
enum Fruits { Apple, Orange, Banana }

for (const fruitKey in Fruits) {
  if (!isNaN(Number(fruitKey))) continue; // Исключаем числовые значения
  const radioButton = `<label><input type="radio" name="fruit" value="${Fruits[fruitKey]}">${fruitKey}</label>`;
}

// Не забудьте снова закрыть дверь холодильника!

Итерация по строковому перечислению

JS
Скопировать код
// Мир цветов!
enum Colors { RED = 'Красный', GREEN = 'Зелёный', BLUE = 'Синий' }

// Перебираем цвета радуги...
Object.keys(Colors).forEach(color => {
    const radioButton = `<label><input type="radio" name="color" value="${color}"> ${Colors[color]}</label>`;
})

// И мир стал ярче!

Визуализация

Предположим, что перечисление — это фруктовый прилавок, где мы предлагаем выбрать фрукт с помощью радиокнопки.

Markdown
Скопировать код
Фруктовый рынок (🍏🍋🍇): [Яблоко, Лимон, Виноград]

А в модификации на JavaScript мы представим фруктовый ассорти:

JS
Скопировать код
for (const fruit of EnumFruit) {
// Размещаем радиокнопку для каждого фрукта
  `<input type="radio" name="fruit" value="${fruit}"> ${fruit}<br>`;
}

Наш фруктовый выбор будет выглядеть так:

Markdown
Скопировать код
Ваша корзина (📻):
- ( ) Яблоко 🍏
- ( ) Лимон 🍋
- ( ) Виноград 🍇

Постарайтесь подобрать себе выбор наполнения корзины!

Продвинутые приемы итерации по перечислениям

Использование методов Object.keys() и Object.values() в JavaScript может показаться волшебством. Но иногда хочется воспользоваться filter() и map() для более изящного кода.

Фильтрация и маппинг при итерации по перечислению

JS
Скопировать код
// Определяем перечисление
enum Status { PENDING, PROCESSING, COMPLETED }

// Создаём радиокнопки, исключая численные значения
const statusRadios = Object.keys(Status)
  .filter(key => isNaN(Number(key))) // Отсеиваем ненужные ключи
  .map(key => `<label><input type="radio" name="status" value="${key}">${Status[key]}</label>`)
  .join('');

Обратное отображение при итерации по перечислению

Числовые перечисления в TypeScript обладают особенностью обратного отображения. Избегайте путаницы, исключая числовые значения ключей.

JS
Скопировать код
const enumButtons = Object.entries(Status)
  .filter(([key]) => isNaN(Number(key))) // Исключаем ключи с числовыми значениями
  .map(([key, value]) => `<label><input type="radio" name="status" value="${value}">${key}</label>`)
  .join('');

Будьте во всеоружии с перечислениями TypeScript

Работая с TypeScript, всегда заботьтесь о совместимости версий, внимательно относитесь к настройкам конфигурации и окружению выполнения. К бою готовы!

Полезные материалы

  1. Протоколы итерации – JavaScript | MDN — важно изучить для понимания итераций в JS.
  2. TypeScript: Руководство – Перечисления — подробное руководство по перечислениям в TypeScript.
  3. Понимание Enum в TypeScript – Medium — углублённый анализ Enum в TypeScript.
  4. Спецификация языка ECMAScript® 2022 — основополагающий документ языка JavaScript.
  5. Динамические радиокнопки с использованием JavaScript – CodePen — практические примеры создания радиокнопок.
Свежие материалы