Цикл по значениям TypeScript Enum без индексов: решение
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
// У нас имеется шикарное перечисление '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-строка для ваших радиокнопок
Типы перечислений и особенности итераций
В обольщающем мире TypeScript присутствуют два типа перечислений: числовые и строковые. Важно не забывать, что их работа после компиляции в JavaScript отличается.
Итерация по числовому перечислению
// Знакомьтесь, перечисление Фрукты: Яблоко, Апельсин и Банан
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>`;
}
// Не забудьте снова закрыть дверь холодильника!
Итерация по строковому перечислению
// Мир цветов!
enum Colors { RED = 'Красный', GREEN = 'Зелёный', BLUE = 'Синий' }
// Перебираем цвета радуги...
Object.keys(Colors).forEach(color => {
const radioButton = `<label><input type="radio" name="color" value="${color}"> ${Colors[color]}</label>`;
})
// И мир стал ярче!
Визуализация
Предположим, что перечисление — это фруктовый прилавок, где мы предлагаем выбрать фрукт с помощью радиокнопки.
Фруктовый рынок (🍏🍋🍇): [Яблоко, Лимон, Виноград]
А в модификации на JavaScript мы представим фруктовый ассорти:
for (const fruit of EnumFruit) {
// Размещаем радиокнопку для каждого фрукта
`<input type="radio" name="fruit" value="${fruit}"> ${fruit}<br>`;
}
Наш фруктовый выбор будет выглядеть так:
Ваша корзина (📻):
- ( ) Яблоко 🍏
- ( ) Лимон 🍋
- ( ) Виноград 🍇
Постарайтесь подобрать себе выбор наполнения корзины!
Продвинутые приемы итерации по перечислениям
Использование методов Object.keys()
и Object.values()
в JavaScript может показаться волшебством. Но иногда хочется воспользоваться filter()
и map()
для более изящного кода.
Фильтрация и маппинг при итерации по перечислению
// Определяем перечисление
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 обладают особенностью обратного отображения. Избегайте путаницы, исключая числовые значения ключей.
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, всегда заботьтесь о совместимости версий, внимательно относитесь к настройкам конфигурации и окружению выполнения. К бою готовы!
Полезные материалы
- Протоколы итерации – JavaScript | MDN — важно изучить для понимания итераций в JS.
- TypeScript: Руководство – Перечисления — подробное руководство по перечислениям в TypeScript.
- Понимание Enum в TypeScript – Medium — углублённый анализ Enum в TypeScript.
- Спецификация языка ECMAScript® 2022 — основополагающий документ языка JavaScript.
- Динамические радиокнопки с использованием JavaScript – CodePen — практические примеры создания радиокнопок.