Ich möchte ein TypeScript und einen enum
Typ iterieren und jeden aufgezählten Symbolnamen erhalten, z.
enum myEnum { entry1, entry2 }
for (var entry in myEnum) {
// use entry's name here, e.g., "entry1"
}
enums
typescript
CalvinDale
quelle
quelle
getAllEnumValues
undgetAllEnumKeys
für Ihren ZweckAntworten:
Der von Ihnen veröffentlichte Code funktioniert. Es werden alle Mitglieder der Aufzählung ausgedruckt, einschließlich der Werte der Aufzählungsmitglieder. Zum Beispiel der folgende Code:
Druckt Folgendes:
Wenn Sie stattdessen nur die Mitgliedsnamen und nicht die Werte möchten, können Sie Folgendes tun:
Das druckt nur die Namen aus:
Vorsichtsmaßnahme: Dies hängt geringfügig von einem Implementierungsdetail ab: TypeScript kompiliert Aufzählungen zu einem JS-Objekt, wobei die Aufzählungswerte Mitglieder des Objekts sind. Wenn TS beschließt, sie in Zukunft anders zu implementieren, könnte die oben genannte Technik brechen.
quelle
+enumMember >= 0
sollte daran liegen,isFinite(+enumMember)
dass negative oder Gleitkommawerte auch umgekehrt abgebildet werden. ( Spielplatz )Obwohl die Antwort bereits gegeben ist, zeigte fast niemand auf die Dokumente
Hier ist ein Ausschnitt
Beachten Sie, dass String-Enum-Mitglieder überhaupt keine umgekehrte Zuordnung erhalten.
quelle
0
oder1
aus dieser Aufzählung?export enum Octave { ZERO = 0, ONE = 1 }
enum Enum {"A"}; let nameOfA = Enum[Enum.A];
? AbAngenommen, Sie halten sich an die Regeln und erstellen nur Aufzählungen mit numerischen Werten. Sie können diesen Code verwenden. Dies behandelt den Fall korrekt, in dem Sie einen Namen haben, der zufällig eine gültige Nummer ist
quelle
Für mich ist die folgende Aufzählung eine einfachere, praktischere und direktere Möglichkeit zu verstehen, was vor sich geht:
Wird im Wesentlichen darauf umgestellt:
Aus diesem Grund gilt Folgendes:
Dies schafft eine einfache Möglichkeit, den Namen einer Aufzählung wie folgt zu erhalten:
Es bietet auch eine gute Möglichkeit, eine Zeichenfolge in einen Aufzählungswert zu konvertieren.
Die beiden oben genannten Situationen sind weitaus häufiger, da Sie normalerweise viel mehr am Namen eines bestimmten Werts und an der generischen Serialisierung von Werten interessiert sind.
quelle
Wenn Sie nur nach den Namen suchen und später wiederholen, verwenden Sie:
quelle
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 }; });
Mit der aktuellen TypeScript Version 1.8.9 verwende ich typisierte Enums:
mit Ergebnissen in diesem Javascript-Objekt:
Ich muss also Schlüssel und Werte abfragen und nur Werte zurückgeben:
Und ich erhalte die Optionsschlüssel in einem Array:
quelle
Ab TypeScript 2.4 können Aufzählungen String-Intializer https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-4.html enthalten
So können Sie schreiben:
und erhalten Sie diese Ausgabe:
quelle
Diese Lösung funktioniert auch.
quelle
Eine weitere interessante Lösung hier verwendet ES6 Karte:
VERWENDEN
quelle
Lassen Sie
ts-enum-util
( github , npm ) die Arbeit für Sie erledigen und stellen Sie viele zusätzliche typsichere Dienstprogramme bereit. Funktioniert sowohl mit Zeichenfolgen als auch mit numerischen Aufzählungen und ignoriert die numerischen Index-Reverse-Lookup-Einträge für numerische Aufzählungen ordnungsgemäß:String enum:
Numerische Aufzählung:
quelle
Ab TypeScript 2.4 würde die Aufzählung den Schlüssel als Mitglied nicht mehr enthalten. Quelle aus der TypeScript-Readme-Datei
Meine Lösung:
quelle
Sie können das
enum-values
Paket verwenden, das ich geschrieben habe, als ich das gleiche Problem hatte:Git: Enum-Werte
quelle
Basierend auf einigen Antworten oben habe ich diese typsichere Funktionssignatur gefunden:
Verwendungszweck:
die Art von
stringVals
ist'entry1' | 'entry2'
Sehen Sie es in Aktion
quelle
(keyof T)[]
stattkeyof T
. Außerdem verhindert dies, dassexport
Ihr Spielplatz funktioniert.Es scheint, dass keine der Antworten hier mit String-Enums im -mode funktioniert
strict
.Betrachten Sie die Aufzählung als:
Der Zugriff mit
AnimalEnum["dog"]
kann zu einem Fehler führen wie:Element implicitly has an 'any' type because expression of type 'any' can't be used to index type 'typeof AnimalEnum'.ts(7053)
.Richtige Lösung für diesen Fall, schreiben Sie es als:
quelle
keyof
mittypeof
! Eine andere Lösung scheint ziemlich undurchsichtig zu sein, aber ich denke, Typescript muss DX - Developer Experience für EnumIch denke, der beste Weg ist, einfach die gewünschten Aufzählungswerte zu deklarieren. Auf diese Weise ist der Zugriff auf sie sauber und hübsch (jedes Mal).
wird herstellen:
quelle
Laut TypeScript-Dokumentation können wir dies über Enum mit statischen Funktionen tun.
Holen Sie sich Enum Name mit statischen Funktionen
Weitere Informationen zu Enum mit statischer Funktion finden Sie unter folgendem Link: https://basarat.gitbooks.io/typescript/docs/enums.html
quelle
Die einzige Lösung, die in allen Fällen für mich funktioniert (auch wenn Werte Zeichenfolgen sind), ist die folgende:
quelle
Alte Frage, aber warum keine
const
Objektkarte verwenden?Anstatt dies zu tun:
Tun Sie dies (achten Sie auf die
as const
Besetzung):quelle
console.log(Object.keys(Foo))
im ersten Beispiel nur zurückkommt["BAR", "EVERYTHING_IS_TERRIBLE"]
..["60", "80", "BAR", "EVERYTHING_IS_TERRIBLE"]
Ich habe diese Frage gefunden, indem ich nach "TypeScript iteriere über Enum-Schlüssel" gesucht habe. Ich möchte also nur eine Lösung veröffentlichen, die in meinem Fall für mich funktioniert. Vielleicht hilft es auch jemandem.
Mein Fall ist der folgende: Ich möchte über jeden Aufzählungsschlüssel iterieren, dann einige Schlüssel filtern und dann auf ein Objekt zugreifen, das Schlüssel als berechnete Werte aus der Aufzählung enthält. So mache ich es also ohne TS-Fehler.
quelle
Ich habe eine EnumUtil-Klasse geschrieben, die eine Typprüfung anhand des Enum-Werts durchführt:
Wie man es benutzt:
Ergebnis für NumberValueEnum-Schlüssel: ["A", "B"]
Ergebnis für NumberValueEnum-Werte: [0, 1]
Ergebnis für StringValueEnumkeys: ["A", "B"]
Ergebnis für StringValueEnumvalues: ["A", "B"]
quelle
Ich finde diese Lösung eleganter:
Es zeigt an:
quelle
Meine Aufzählung ist wie folgt:
Wenn Sie dies tun, geben Sie undefiniert zurück :
Um dieses Problem zu beheben, wähle ich einen anderen Weg, um es mit einem Rohr zu tun:
Und um es zu benutzen:
quelle
Wenn Sie eine Aufzählung haben
Dann können Sie Schlüssel und Werte erhalten wie:
quelle
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)
Ich habe eine Hilfsfunktion geschrieben, um eine Aufzählung aufzulisten:
Verwendungszweck:
Die Funktion gibt etwas zurück, das leicht aufgezählt werden kann, und wandelt sich auch in den Aufzählungstyp um.
quelle
Mit einer aktuellen TypeScript-Version können Sie Funktionen wie diese verwenden, um die Aufzählung einem Datensatz Ihrer Wahl zuzuordnen. Beachten Sie, dass Sie mit diesen Funktionen keine Zeichenfolgenwerte definieren können, da sie nach Schlüsseln mit einem Wert suchen, der eine Zahl ist.
quelle
Hier gibt es bereits viele Antworten, aber ich denke, ich werde meine Lösung trotzdem auf den Stapel werfen.
TypeScript-Spielplatz
Zur Klarheit:
Referenz für TypeScript Record
Eine nette Hilfsfunktion:
quelle
Um die Liste der Aufzählungswerte zu erhalten, müssen Sie Folgendes verwenden:
quelle
Es ist nicht genau die Antwort auf Ihre Frage, aber es ist ein Trick, um Ihr Problem anzugehen.
Sie können Ihr Listenmodell beliebig erweitern.
Jetzt können Sie es folgendermaßen verwenden:
oder:
quelle