Me gustaría iterar un TypeScript un enum
tipo y obtener cada nombre de símbolo enumerado, por ejemplo:
enum myEnum { entry1, entry2 }
for (var entry in myEnum) {
// use entry's name here, e.g., "entry1"
}
enums
typescript
CalvinDale
fuente
fuente
getAllEnumValues
ygetAllEnumKeys
para su propósitoRespuestas:
El código que publicaste funcionará; imprimirá todos los miembros de la enumeración, incluidos los valores de los miembros de la enumeración. Por ejemplo, el siguiente código:
Imprimirá lo siguiente:
Si, en cambio, solo desea los nombres de los miembros y no los valores, puede hacer algo como esto:
Eso imprimirá solo los nombres:
Advertencia: esto se basa ligeramente en un detalle de implementación: TypeScript compila enumeraciones a un objeto JS con los valores de enumeración como miembros del objeto. Si TS decidiera implementarlos de manera diferente en el futuro, la técnica anterior podría romperse.
fuente
+enumMember >= 0
debería deberse aisFinite(+enumMember)
que los valores negativos o de coma flotante también se asignan inversamente. (Aunque la respuesta ya está provista, casi nadie señaló el documentos
Aquí hay un fragmento
Tenga en cuenta que los miembros de cadena de enumeración no obtienen una asignación inversa generada en absoluto.
fuente
0
o1
de esta enumeración?export enum Octave { ZERO = 0, ONE = 1 }
enum Enum {"A"}; let nameOfA = Enum[Enum.A];
? A partir de [email protected] funciona bien para mí ...Suponiendo que se apega a las reglas y solo produce enumeraciones con valores numéricos, puede usar este código. Esto maneja correctamente el caso en el que tiene un nombre que coincidentemente es un número válido
fuente
Para mí, una forma más fácil, práctica y directa de entender lo que está sucediendo es la siguiente enumeración:
Se convertirá esencialmente a esto:
Debido a esto, lo siguiente será cierto:
Esto crea una manera fácil de obtener el nombre de un enumerado de la siguiente manera:
También crea una buena manera de convertir una cadena en un valor enumerado.
Las dos situaciones anteriores son una situación mucho más común, porque generalmente está mucho más interesado en el nombre de un valor específico y en la serialización de valores de forma genérica.
fuente
Si solo busca los nombres e itera más tarde, use:
fuente
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 }; });
Con la versión actual de TypeScript 1.8.9 utilizo enumeraciones escritas:
con resultados en este objeto Javascript:
así que tengo que consultar a través de claves y valores y solo devolver valores:
Y recibo las teclas de opción en una matriz:
fuente
A partir de TypeScript 2.4, las enumeraciones pueden contener inicializadores de cadenas https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-4.html
Esto te permite escribir:
y obtener esta salida:
fuente
Esta solución también funciona.
fuente
Otra solución interesante que se encuentra aquí es usar ES6 Map:
UTILIZAR
fuente
Deje que
ts-enum-util
( github , npm ) haga el trabajo por usted y proporcione muchas utilidades adicionales de tipo seguro. Funciona con cadenas y enumeraciones numéricas, ignorando adecuadamente las entradas de búsqueda inversa de índice numérico para enumeraciones numéricas:Enum de cadena:
Enumeración numérica:
fuente
A partir de TypeScript 2.4, la enumeración ya no contendría la clave como miembro. fuente del archivo Léame de TypeScript
Mi solución:
fuente
Puedes usar el
enum-values
paquete que escribí cuando tuve el mismo problema:Git: enum-values
fuente
Basado en algunas respuestas anteriores, se me ocurrió esta firma de función de tipo seguro:
Uso:
el tipo de
stringVals
es'entry1' | 'entry2'
Véalo en acción
fuente
(keyof T)[]
lugar dekeyof T
. Además,export
evita que su patio de recreo funcione.Parece que ninguna de las respuestas aquí funcionará con enums de cadena en
strict
modo.Considere enum como:
Acceder a esto con
AnimalEnum["dog"]
puede provocar un error como:Element implicitly has an 'any' type because expression of type 'any' can't be used to index type 'typeof AnimalEnum'.ts(7053)
.Solución adecuada para ese caso, escríbala como:
fuente
keyof
contypeof
! Otra solución parece bastante opaca, pero después de todo, creo que Typecript debe seguir mejorando en DX - Developer Experience for EnumCreo que la mejor manera es declarar los valores de enumeración deseados. De esa forma, acceder a ellos es limpio y bonito (todo el tiempo).
Producirá:
fuente
De acuerdo con la documentación de TypeScript, podemos hacer esto a través de Enum con funciones estáticas.
Obtenga Enum Name con funciones estáticas
Para leer más sobre Enum con función estática, siga el siguiente enlace https://basarat.gitbooks.io/typescript/docs/enums.html
fuente
La única solución que funciona para mí en todos los casos (incluso si los valores son cadenas) es la siguiente:
fuente
Antigua pregunta, pero, ¿por qué no usar un
const
mapa de objetos?En lugar de hacer esto:
Haz esto (presta atención al
as const
elenco):fuente
console.log(Object.keys(Foo))
en el primer ejemplo solo regresa["BAR", "EVERYTHING_IS_TERRIBLE"]
..["60", "80", "BAR", "EVERYTHING_IS_TERRIBLE"]
Encontré esta pregunta buscando "TypeScript iterate over enum keys". Así que solo quiero publicar una solución que funcione para mí en mi caso. Quizás también ayude a alguien.
Mi caso es el siguiente: quiero iterar sobre cada clave de enumeración, luego filtrar algunas claves, luego acceder a algún objeto que tenga claves como valores calculados de enumeración. Así es como lo hago sin tener ningún error de TS.
fuente
Escribí una clase EnumUtil que está haciendo una verificación de tipo por el valor enum:
Cómo usarlo:
Resultado para las teclas NumberValueEnum: ["A", "B"]
Resultado para los valores NumberValueEnum: [0, 1]
Resultado para StringValueEnumkeys: ["A", "B"]
Resultado para StringValueEnumvalues: ["A", "B"]
fuente
Encuentro esa solución más elegante:
Muestra:
fuente
Mi enumeración es así:
haciendo este retorno indefinido :
Para resolver este problema, elijo otra forma de hacerlo usando una tubería:
Y para usarlo:
fuente
Si tienes enumeracion
Entonces puede obtener claves y valores como:
fuente
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)
Escribí una función auxiliar para enumerar una enumeración:
Uso:
La función devuelve algo que se puede enumerar fácilmente y también se convierte al tipo de enumeración.
fuente
Con una versión actual de TypeScript, puede utilizar funciones como estas para asignar la enumeración a un registro de su elección. Tenga en cuenta que no puede definir valores de cadena con estas funciones, ya que buscan claves con un valor que sea un número.
fuente
Ya hay muchas respuestas aquí, pero creo que arrojaré mi solución a la pila de todos modos.
Zona de juegos de TypeScript
Para mayor claridad:
Referencia para el registro de TypeScript
Una buena función auxiliar:
fuente
Para obtener la lista de los valores de enumeración que debe usar:
fuente
No es exactamente la respuesta de su pregunta, pero es un truco para abordar su problema.
Puede ampliar su modelo de lista de la forma que desee.
Ahora, puede usarlo de esta manera:
o:
fuente