Ich erhalte eine Nummer type = 3
und muss überprüfen, ob sie in dieser Aufzählung vorhanden ist:
export const MESSAGE_TYPE = {
INFO: 1,
SUCCESS: 2,
WARNING: 3,
ERROR: 4,
};
Der beste Weg, den ich gefunden habe, besteht darin, alle Enum-Werte als Array abzurufen und indexOf darauf zu verwenden. Der resultierende Code ist jedoch nicht gut lesbar:
if( -1 < _.values( MESSAGE_TYPE ).indexOf( _.toInteger( type ) ) ) {
// do stuff ...
}
Gibt es einen einfacheren Weg, dies zu tun?
javascript
typescript
enums
Tim Schoch
quelle
quelle
if(Object.values(MESSAGE_TYPE).includes(+type)
? Sie können nicht viel tun.!!MESSAGE_TYPE[type]
überprüfen, ob ein Wert vorhanden ist.MESSAGE_TYPE[type]
wird undefiniert zurückgeben, wenn der Wert vontype
nicht existiert amMESSAGE_TYPE
0
.MESSAGE_TYPE[type] !== undefined
Antworten:
Wenn Sie möchten, dass dies mit Zeichenfolgenaufzählungen funktioniert, müssen Sie diese verwenden,
Object.values(ENUM).includes(ENUM.value)
da Zeichenfolgenaufzählungen laut https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-4.html nicht umgekehrt zugeordnet sind :wird:
Sie müssen also nur Folgendes tun:
Wenn Sie eine Fehlermeldung für: erhalten
Property 'values' does not exist on type 'ObjectConstructor'
, zielen Sie nicht auf ES2017. Sie können entweder diese tsconfig.json-Konfiguration verwenden:Oder du kannst einfach eine beliebige Besetzung machen:
quelle
Property 'values' does not exist on type 'ObjectConstructor'
.(<any>Object).values(Vehicle).includes(Vehicle.car)
(Object.values(Vehicle).includes(Vehicle.car))
wird immer wahr sein, aber die Frage ist, wie überprüft werden soll, ob ein bestimmter Wert in enum enthalten ist, z. B.(Object.values(Vehicle).includes('car'))
sollte return,true
aber(Object.values(Vehicle).includes('plane'))
false zurückgeben.Wenn Sie TypeScript verwenden, können Sie eine tatsächliche Aufzählung verwenden . Dann können Sie es mit überprüfen
in
.Dies funktioniert nur, wenn Ihre Aufzählung nummeriert und nicht markiert ist
const
:Dies funktioniert, weil beim Kompilieren der obigen Aufzählung das folgende Objekt generiert wird:
quelle
export const MESSAGE_TYPE = { ... }
MESSAGE_TYPE
zu einer tatsächlichen Aufzählung gewechselt , wie Sie vorgeschlagen haben, und jetzt funktioniert Ihre Lösung wie ein Zauber. Danke @SaravanaTypeScript v3.7.3
quelle
Es gibt eine sehr einfache und einfache Lösung für Ihre Frage:
quelle
Differenz Ergebnis im Protokoll:
Als Lösung müssen wir den Schlüssel als Zahl entfernen.
Verwendung
quelle