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

enum Direction {
    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

enum Status {
    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

enum Message {
    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

const enum Color {
    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

enum BooleanLikeHeterogeneousEnum {
    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

enum ShapeKind {
    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

enum FileAccess {
    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.
Andere Erweiterungen