Wie kann ich Enum-Werte für die Anzeige in Optionsfeldern durchlaufen? [duplicate]
Lesezeit: 2 Minuten
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.
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
13166200cookie-checkWie kann ich Enum-Werte für die Anzeige in Optionsfeldern durchlaufen? [duplicate]yes
Schau dir das an enum-für Paket
– transang
3. Juni 2020 um 16:33 Uhr