Я хотел бы повторить TypeScript a enum
тип и получить имя каждого перечисляемого символа, например:
enum myEnum { entry1, entry2 }
for (var entry in myEnum) {
// use entry's name here, e.g., "entry1"
}
enums
typescript
CalvinDale
источник
источник
getAllEnumValues
иgetAllEnumKeys
для ваших целейОтветы:
Код, который вы разместили, будет работать; он распечатает всех членов перечисления, включая значения членов перечисления. Например, следующий код:
Напечатает следующее:
Если вместо этого вам нужны только имена членов, а не значения, вы можете сделать что-то вроде этого:
Это распечатает только имена:
Предостережение: это немного зависит от деталей реализации: TypeScript компилирует перечисления в объект JS со значениями перечисления, являющимися членами объекта. Если TS решит реализовать их в будущем иначе, описанная выше техника может сломаться.
источник
+enumMember >= 0
должно быть,isFinite(+enumMember)
потому что отрицательные значения или значения с плавающей запятой тоже отображаются обратным образом. ( Детская площадка )Хотя ответ уже предоставлен, почти никто не указал на документы
Вот фрагмент
Имейте в виду, что члены перечисления строк вообще не генерируют обратное отображение.
источник
0
или1
из этого перечисления?export enum Octave { ZERO = 0, ONE = 1 }
enum Enum {"A"}; let nameOfA = Enum[Enum.A];
? По состоянию на typescript@2.9.2 у меня все работает нормально ...Предполагая, что вы придерживаетесь правил и производите только перечисления с числовыми значениями, вы можете использовать этот код. Это правильно обрабатывает случай, когда у вас есть имя, которое по совпадению является действительным числом
источник
Для меня более простой, практичный и прямой способ понять, что происходит, это следующее перечисление:
Будет преобразован по существу в это:
Из-за этого будет выполнено следующее:
Это создает простой способ получить имя перечисляемого следующим образом:
Это также создает хороший способ преобразовать строку в перечисляемое значение.
Вышеуказанные две ситуации являются гораздо более распространенной ситуацией, потому что обычно вас гораздо больше интересует имя определенного значения и его сериализация в общем виде.
источник
Если вы только ищете имена и повторяете позже, используйте:
источник
Object.values(myEnum).filter(value => typeof value === 'string') as string[];
Object.values(myEnum).filter(value => typeof value === 'string').map(key => { return {id: myEnum[key], type: key }; });
С текущей версией TypeScript 1.8.9 я использую типизированные Enums:
с результатами в этом объекте Javascript:
поэтому я должен запросить ключи и значения и только вернуть значения:
И я получаю ключи опции в массиве:
источник
Начиная с TypeScript 2.4, перечисления могут содержать инициализаторы строк https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-4.html.
Это позволяет вам написать:
и получить этот вывод:
источник
Это решение тоже работает.
источник
Другое интересное решение, найденное здесь , использует ES6 Map:
ИСПОЛЬЗОВАНИЕ
источник
Пусть
ts-enum-util
( GitHub , нпм ) сделает всю работу за вас и предоставит множество дополнительных утилит, безопасных для типов. Работает как со строковыми, так и числовыми перечислениями, должным образом игнорируя записи обратного просмотра числового индекса для числовых перечислений:Строковое перечисление:
Числовое перечисление:
источник
Начиная с TypeScript 2.4, перечисление больше не будет содержать ключ в качестве члена. Исходный текст из readme TypeScript
Мое решение:
источник
Вы можете использовать
enum-values
пакет, который я написал, когда у меня была такая же проблема:Git: enum-значения
источник
Object.keys(e).filter(key => isNaN(+key))
, которая не будет работать с перечислениями строк и т. Д., Верно?Основываясь на некоторых ответах выше, я придумал эту сигнатуру безопасной для типов функции:
Использование:
тип
stringVals
является'entry1' | 'entry2'
Увидеть это в действии
источник
(keyof T)[]
вместоkeyof T
. Кроме того,export
останавливает вашу игровую площадку от работы.Кажется, что ни один из ответов здесь не будет работать со строковыми перечислениями в
strict
-mode.Рассмотрим перечисление как:
Доступ к этому с помощью
AnimalEnum["dog"]
может привести к ошибке как:Element implicitly has an 'any' type because expression of type 'any' can't be used to index type 'typeof AnimalEnum'.ts(7053)
,Правильное решение для этого случая, запишите его как:
источник
keyof
сtypeof
! Другое решение кажется довольно непрозрачным, но в конце концов я думаю, что Typescript должен постоянно улучшать DX - Опыт разработчика для EnumЯ думаю, что лучший способ - просто объявить желаемые значения перечисления. Таким образом, доступ к ним чистый и красивый (каждый раз).
будет производить:
источник
Согласно документации TypeScript, мы можем сделать это через Enum со статическими функциями.
Получить Enum Name со статическими функциями
чтобы узнать больше о Enum со статической функцией, перейдите по ссылке ниже https://basarat.gitbooks.io/typescript/docs/enums.html
источник
Единственное решение, которое работает для меня во всех случаях (даже если значения являются строками), заключается в следующем:
источник
Старый вопрос, но почему бы не использовать
const
карту объектов?Вместо этого:
Сделайте это (обратите внимание на
as const
актерский состав):источник
console.log(Object.keys(Foo))
в первом примере только возвращается["BAR", "EVERYTHING_IS_TERRIBLE"]
..["60", "80", "BAR", "EVERYTHING_IS_TERRIBLE"]
Я нашел этот вопрос, выполнив поиск "TypeScript итерации по ключам перечисления". Поэтому я просто хочу опубликовать решение, которое работает для меня в моем случае. Может быть, это кому-то тоже поможет.
Мой случай следующий: я хочу перебрать каждый ключ перечисления, затем отфильтровать некоторые ключи, а затем получить доступ к некоторому объекту, ключи которого являются вычисленными значениями из перечисления. Так вот, как я делаю это без каких-либо ошибок TS.
источник
Я написал класс EnumUtil, который выполняет проверку типа по значению enum:
Как это использовать:
Результат для ключей NumberValueEnum: ["A", "B"]
Результат для значений NumberValueEnum: [0, 1]
Результат для StringValueEnumkeys: ["A", "B"]
Результат для StringValueEnumvalues: ["A", "B"]
источник
Я считаю это решение более элегантным:
Он отображает:
источник
Мой Enum такой:
таким образом, это возвращение не определено :
Чтобы решить эту проблему, я выбрал другой способ сделать это с помощью Pipe:
И использовать это:
источник
Если у вас есть enum
Тогда вы можете получить ключ и значения, такие как:
источник
Argument of type '(d: Diet) => void' is not assignable to parameter of type '(value: string, index: number, array: string[]) => void'. Types of parameters 'd' and 'value' are incompatible. Type 'string' is not assignable to type 'MyEnum'.(2345)
Я написал вспомогательную функцию для перечисления перечисления:
Использование:
Функция возвращает то, что может быть легко перечислено, а также приводится к типу enum.
источник
Используя текущую версию TypeScript, вы можете использовать такие функции, чтобы сопоставить Enum с выбранной вами записью. Обратите внимание, что вы не можете определять строковые значения с помощью этих функций, так как они ищут ключи со значением, которое является числом.
источник
Здесь уже есть много ответов, но я полагаю, что все равно выложу свое решение в стек.
TypeScript Playground
Для ясности:
Ссылка на запись TypeScript
Хорошая вспомогательная функция:
источник
Чтобы получить список значений перечисления, которые вы должны использовать:
источник
Это не совсем ответ на ваш вопрос, но это уловка для решения вашей проблемы.
Вы можете расширить свою модель списка так, как вы хотите.
Теперь вы можете использовать его следующим образом:
или:
источник