670 Stimmen

Wie bekomme ich die Namen der enum Einträge?

Ich möchte ein TypeScript-Enum-Objekt durchlaufen und den Namen jedes aufgezählten Symbols erhalten, zum Beispiel: enum myEnum { entry1, entry2 }

for (var entry in myEnum) { 
    // Verwende den Namen des Eintrags hier, z.B. "entry1"
}

48voto

coyer Punkte 3862

Es scheint, dass keine der Antworten hier mit String-Enums im strict-Modus funktionieren wird.

Betrachten Sie das Enum als:

enum AnimalEnum {
  dog = "dog", cat = "cat", mouse = "mouse"
}

Der Zugriff darauf mit AnimalEnum["dog"] kann zu einem Fehler führen wie:

Element hat implizit den Typ 'any', weil der Ausdruck vom Typ 'any' nicht zum Indizieren des Typs 'typeof AnimalEnum' verwendet werden kann. ts(7053).

Richtige Lösung für diesen Fall, schreiben Sie es als:

AnimalEnum["dog" as keyof typeof AnimalEnum]

32voto

John Huebner Punkte 437

Ab TypeScript 2.4 können enums Zeichenfolgeninitialisierer enthalten https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-4.html

Dies ermöglicht es dir, folgendes zu schreiben:

 enum Order {
      ONE = "Erster",
      TWO = "Zweiter"
 }

console.log(`Eins ist ${Order.ONE.toString()}`);

und diese Ausgabe zu erhalten:

Eins ist Erster

32voto

Philip Punkte 21490

Mit der aktuellen TypeScript-Version 1.8.9 verwende ich typisierte Enums:

export enum Option {
    OPTION1 = 'das ist Option 1',
    OPTION2 = 'das ist Option 2'
}

was zu diesem Javascript-Objekt führt:

Option = {
    "OPTION1": "das ist Option 1",
    "OPTION2": "das ist Option 2",
    "das ist Option 1": "OPTION1",
    "das ist Option 2": "OPTION2"
}

also muss ich durch Schlüssel und Werte abfragen und nur Werte zurückgeben:

let optionNames: Array = [];    
for (let enumValue in Option) {
    let optionNameLength = optionNames.length;

    if (optionNameLength === 0) {
        this.optionNames.push([enumValue, Option[enumValue]]);
    } else {
        if (this.optionNames[optionNameLength - 1][1] !== enumValue) {
            this.optionNames.push([enumValue, Option[enumValue]]);
        }
    }
}

Und ich erhalte die Optionschlüssel in einem Array:

optionNames = [ "OPTION1", "OPTION2" ];

28voto

Carlinhos Punkte 940

Diese Lösung funktioniert auch.

enum BildschirmTyp {
    Bearbeiten = 1,
    Neu = 2,
    Anzeigen = 4
}

var typ: BildschirmTyp = BildschirmTyp.Bearbeiten;

console.log(BildschirmTyp[typ]); //Bearbeiten

26voto

AbolfazlR Punkte 8016

Kurz gesagt

wenn Ihr enum wie folgt aussieht:

export enum Colors1 {
  Red = 1,
  Green = 2,
  Blue = 3
}

um spezifischen Text und Wert zu erhalten:

console.log(Colors1.Red); // 1 
console.log(Colors1[Colors1.Red]); // Rot

um eine Liste von Werten und Texten zu erhalten:

public getTextAndValues(e: { [s: number]: string }) {
  for (const enumMember in e) {
    if (parseInt(enumMember, 10) >= 0) {
      console.log(e[enumMember]) // Wert, wie 1,2,3
      console.log(parseInt(enumMember, 10)) // Text, wie Rot,Grün,Blau
    }
  }
}
this.getTextAndValues(Colors1)

wenn Ihr enum wie folgt aussieht:

export enum Colors2 {
  Red = "Rot",
  Green = "Grün",
  Blue = "Blau"
}

um spezifischen Text und Wert zu erhalten:

console.log(Colors2.Red); // Rot
console.log(Colors2["Red"]); // Rot

um eine Liste von Werten und Texten zu erhalten:

public getTextAndValues(e: { [s: string]: string }) {
  for (const enumMember in e) {
    console.log(e[enumMember]);// Wert, wie Rot,Grün,Blau
    console.log(enumMember); //  Text, wie Rot,Grün,Blau
  }
}
this.getTextAndValues(Colors2)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X