TypeScript-Enum
Enum ist ein sehr nützliches Feature in TypeScript, mit dem wir eine Reihe benannter Konstanten definieren können. Enums können den Code leichter lesbar und wartbar machen, indem sie "magische Zahlen" durch aussagekräftige Namen ersetzen.
Numerisches Enum
Standardmäßig werden Enums ab 0 nummeriert.
Beispiel
Nach oben, // 0
Down, // 1
Left, // 2
Rechts // 3
}
var dir: Direction = Direction.Up;
console.log("Richtung: " + dir);
console.log("Richtungsname: " + Direction[0]);
Ausgabe:
方向: 0 方向名称: Up
Manuelle Zuweisung
Du kannst Enum-Mitgliedern manuell Werte zuweisen.
Beispiel
Erfolg = 1,
Fehler = 2,
Ausstehend = 3
}
console.log("Status: " + Status.Success);
console.log("Statusname: " + Status[1]);
Ausgabe:Fortune
Status: 1 状态名称: Success
String-Enum
In String-Enums muss jedes Mitglied einen String-Literal-Wert haben.
Beispiel
Success = "SUCCESS",
Error = "ERROR",
Warning = "WARNING"
}
console.log("Message: " + Message.Success);
Ausgabe:
Message: SUCCESS
Konstantes Enum
VerwendungconstMit const modifizierte Enums werden zur Kompilierungszeit inline eingefügt und erzeugen optimierteren Code.
Beispiel
Red = "RED",
Green = "GREEN",
Blue = "BLUE"
}
var favoriteColor: Color = Color.Red;
console.log("Lieblingsfarbe: " + favoriteColor);
Heterogenes Enum
Enums können numerische und String-Werte mischen, aber dies wird nicht empfohlen.
Beispiel
No = 0,
Yes = "YES"
}
console.log("Wert: " + BooleanLikeHeterogeneousEnum.No);
console.log("String-Wert: " + BooleanLikeHeterogeneousEnum.Yes);
Enum-Member-Typen
Wenn alle Enum-Member Literalwerte sind, kann der Member-Typ als Typ verwendet werden.
Beispiel
Circle = "circle",
Square = "square"
}
interface Circle {
kind: ShapeKind.Circle;
radius: number;
}
interface Square {
kind: ShapeKind.Square;
sideLength: number;
}
var c: Circle = {
kind: ShapeKind.Circle,
radius: 10
};
console.log("Circle: " + JSON.stringify(c));
Laufzeit-Enums
Reguläre Enums werden zur Laufzeit als echte Objekte beibehalten.
Beispiel
Read = 1 << 1,
Write = 1 << 2,
ReadWrite = Read | Write
}
console.log("Dateizugriff: " + FileAccess.ReadWrite);
Ausgabe:
文件访问: 6
Zusammenfassung
- Numerische Enums:Standard beginnt bei 0, kann manuell zugewiesen werden.
- String-Enums:Jedes Mitglied muss ein String-Literal sein.
- Konstante Enums:Verwenden Sie const, zur Kompilierungszeit inline eingefügt.
- Heterogene Enums:Mischen von Zahlen und Strings, nicht empfohlen.
- Mitgliedstypen:Literal-Enum-Mitglieder können als Typen verwendet werden.