×

Typescript 里枚举 Enum 的用法

2024-03-22 13:26:36 Falcon

在 TypeScript 中,枚举(Enum)是一种定义命名常量的手段。以下是枚举类型声明和使用的步骤:

声明枚举类型

首先,你需要使用 enum 关键字来声明一个枚举类型,然后定义它的成员:

enum Color {
  Red,
  Green,
  Blue
}

在上面的代码中,我们定义了一个名为 Color 的枚举类型,它包含 RedGreenBlue 三个成员。在 TypeScript 中,枚举成员会被赋予从 0 开始的递增的数字值。在这个例子中,Color.Red 的值是 0,Color.Green 是 1,Color.Blue 是 2。

使用枚举类型

声明了枚举类型后,你可以像使用任何其他类型一样来使用它:

let c: Color = Color.Green;

在这行代码中,我们声明了一个类型为 Color 的变量 c 并将 Color.Green 这个枚举成员分配给它。 你也可以通过枚举成员的值来访问这个成员:

let colorName: string = Color[2];
console.log(colorName); // 输出 'Blue'

在这个例子中,我们通过枚举值 2 访问了 Color.Blue 成员,然后获取了对应的名字(字符串)'Blue' 并打印输出。 枚举类型提供了一种表达一组相关常量值的清晰方法,并且当你希望一个变量具有这组值中的一个值时,使用枚举类型会更加清晰和有文档性。


枚举成员在 TypeScript 中不仅可以是字符串;它们通常是数字值,但也可以是字符串值。以下是数字枚举和字符串枚举的例子:

数字枚举(Numeric Enums)

默认情况下,枚举成员被赋予从 0 开始的数字值,但你也可以手动设置它们的值:

enum Direction {
  Up = 1,
  Down,
  Left,
  Right
}

在这个例子中,Direction.Up 的值是手动设置为 1 的,后续的成员 Down, Left, Right 则分别自动增加,即值为 2、3、4。

字符串枚举(String Enums)

字符串枚举成员必须具有手动设置的字符串值,如下面的例子所示:

enum Direction {
  Up = "UP",
  Down = "DOWN",
  Left = "LEFT",
  Right = "RIGHT"
}

在这里,每个枚举成员都显式地被赋予了一个字符串值。 TypeScript 同样支持异构枚举(Heterogeneous Enums),其中枚举成员可以是数字和字符串的混合:

enum BooleanLikeHeterogeneousEnum {
  No = 0,
  Yes = "YES",
}

这表明枚举类型提供了很大的灵活性,你可以根据实际需要选择最适合的方式来定义成员。

典型应用场景

枚举(Enum)在 TypeScript 中的典型应用场景包括:

  1. 状态集管理:当程序中有一组预定义的状态或模式时,可以使用枚举来命名它们,例如 HTTP 请求的方法(GET, POST, PUT, DELETE)。
  2. 配置选项:为库或应用程序定义一组选项,如日志级别(Debug, Info, Warning, Error)。
  3. 错误代码分类:为错误消息定义一组错误代码,使得错误处理更易于管理和维护。
  4. 表达固定集合:在需要一组固定值的任何场合,譬如星期(Monday, Tuesday, ...)或方向(North, South, East, West)。
  5. 表单选项:在前端开发中,创建表单时,表单字段可能有固定的选项集,枚举可以清晰定义这些集合。
  6. 标志位操作:位标志通常用于表示一组布尔值的组合,可以通过枚举来定义一组位掩码来使用。 枚举增强了代码的可读性和维护性,同时还使得在未来扩展或修改值集时能更加容易和安全。
本文收录于