Búsqueda de sitios web

typescript - Mapeo inverso de enumeración de cadenas angular 4


Tengo un enum de cadenas:

export enum TokenLength {
  SIX = '6',
  EIGHT = '8',
}

Y necesito obtener la cadena 'SIX' o 'EIGHT', así que mapear al revés este enum. He intentado varias cosas:

tokenLength = TokenLength;      

for (var enumMember in this.tokenLength) {
    console.log("enum member: ", enumMember); //result: enum member:  SIX , enum member:  EIGHT
}

for (var enumMember in this.tokenLength) {
    console.log("enum member: ", this.tokenLength[enumMember]); //result: enum member:  6, enum member:  8
}

Esto parece estar funcionando bien, pero cada vez que hago lo siguiente, no funciona.

console.log(this.tokenLength['SIX']); //result: 6
console.log(this.tokenLength.SIX); //result: 6
console.log(this.tokenLength[this.tokenLength.SIX]); //result: undefined
console.log(this.tokenLength['6']); //result: undefined
console.log(this.tokenLength[0]); //result: undefined

Necesito que el resultado 'undefined' sea 'SEIS'. ¿Cómo puedo hacer eso? Gracias de antemano.

Respuesta #1

Puedes consultar la documentación de TypeScript.typeScript

 enum Enum {
        A
  }
  let a = Enum.A;
  let nameOfA = Enum[a]; // "A"

Para que funcione de esta manera, necesitas eliminar las comillas en tu enum:

enum TokenLength {
      SIX = 6,
      EIGHT = 8
}

Espero que eso ayude

Respuesta #2

Según la documentación de TypeScript:

La advertencia es que los enums inicializados con cadenas no se pueden mapear inversamente para obtener el nombre del miembro del enum original.

Así que, desafortunadamente, no es posible.