Wie kann ich Enum-Werte für die Anzeige in Optionsfeldern durchlaufen? [duplicate]

Lesezeit: 2 Minuten

Benutzer-Avatar
Anthony Brenelière

Was ist der richtige Weg, um Literale einer Aufzählung in TypeScript zu durchlaufen?

(Ich verwende derzeit TypeScript 1.8.1.)

Ich habe folgende Enum:

export enum MotifIntervention {
    Intrusion,
    Identification,
    AbsenceTest,
    Autre
}

export class InterventionDetails implements OnInit
{
    constructor(private interService: InterventionService)
    {
        let i:number = 0;
        for (let motif in MotifIntervention) {
            console.log(motif);
        }
    }

Das angezeigte Ergebnis ist eine Liste

0
1
2
3
Intrusion,
Identification,
AbsenceTest,
Autre

Ich möchte nur vier Iterationen in der Schleife, da die Aufzählung nur vier Elemente enthält. Ich möchte nicht, dass 0 1 2 und 3 Indexnummern der Aufzählung zu sein scheinen.

  • Schau dir das an enum-für Paket

    – transang

    3. Juni 2020 um 16:33 Uhr

Benutzer-Avatar
Nitzan Tomer

Zwei Optionen:

for (let item in MotifIntervention) {
    if (isNaN(Number(item))) {
        console.log(item);
    }
}

Oder

Object.keys(MotifIntervention).filter(key => !isNaN(Number(MotifIntervention[key])));

(Code auf dem Spielplatz)


Bearbeiten

String-Enumerationen sehen anders aus als normale, zum Beispiel:

enum MyEnum {
    A = "a",
    B = "b",
    C = "c"
}

Kompiliert in:

var MyEnum;
(function (MyEnum) {
    MyEnum["A"] = "a";
    MyEnum["B"] = "b";
    MyEnum["C"] = "c";
})(MyEnum || (MyEnum = {}));

Was Ihnen nur dieses Objekt gibt:

{
    A: "a",
    B: "b",
    C: "c"
}

Sie können alle Schlüssel bekommen (["A", "B", "C"]) so was:

Object.keys(MyEnum);

Und die Werte (["a", "b", "c"]):

Object.keys(MyEnum).map(key => MyEnum[key])

Oder verwenden Objekt.Werte():

Object.values(MyEnum)

  • Es funktioniert nicht, weil 0 1 2 3 Strings sind.

    – Anthony Brenelière

    7. September 2016 um 14:46 Uhr

  • Deshalb gibt es eine Prüfung für isNaN(Number(...)). Es funktioniert auf dem Spielplatz, den ich geteilt habe

    – Nitzan Tomer

    7. September 2016 um 15:01 Uhr

  • Danke für diesen Ansatz. Für die Object.keys Methode, die Sie verwenden möchten Object.keys(MotifIntervention).filter(key => isNaN(Number(key))).

    – Jon Onstott

    13. Februar 2018 um 17:56 Uhr

  • Dies funktioniert nicht, wenn Sie erwarten, Werte des Enum-Typs zu durchlaufen. So for (let item in MotifIntervention) { doThing(item) } wird scheitern, wenn typeof doThing Funktion ist (arg: MotifIntervention) => void. Das liegt daran, dass die for..in Schleife behandelt item als Typ stringnicht Typ MotifIntervention.

    – Charvey

    24. September 2018 um 18:00 Uhr

  • @NitzanTomer – das klingt nach einer guten Problemumgehung zur Laufzeit, aber ich spreche von der Kompilierzeit. Wenn Sie versuchen anzurufen doThing(item) und doThing ist vom Typ (arg: MotifIntervention) => voiderhalten Sie einen Kompilierzeitfehler “Argument vom Typ ‘String’ kann Parameter vom Typ ‘MotifIntervention’ nicht zugewiesen werden.”

    – Charvey

    24. September 2018 um 19:08 Uhr


1316620cookie-checkWie kann ich Enum-Werte für die Anzeige in Optionsfeldern durchlaufen? [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy