原文: https://howtodoinjava.com/typescript/enums/

在 TypeScript 中,枚举是一组命名常量。 尽管它是可选的,但枚举应为一组命名的相关常量。 TypeScript 支持传统的枚举和基于字符串的枚举。

1)基于字符串的枚举

让我们从基于字符串的枚举开始,因为与传统枚举相比,它们是推荐的方法。 始终使用基于字符串的枚举,直到您有充分的理由选择传统的枚举为止。

1.1)语法

枚举语法与其他语言非常相似,例如 Java。

  1. enum AppStatus {
  2. ACTIVE = 'ACTIVE',
  3. INACTIVE = 'INACTIVE',
  4. ONHOLD = 'ONHOLD'
  5. }

查看 JavaScript 中生成的代码。 它具有一个生成的查找表,如下所示。

  1. var AppStatus;
  2. (function (AppStatus) {
  3. AppStatus["ACTIVE"] = "ACTIVE";
  4. AppStatus["INACTIVE"] = "INACTIVE";
  5. AppStatus["ONHOLD"] = "ONHOLD";
  6. })(AppStatus || (AppStatus = {}));

1.2)访问枚举成员值

使用Enum.memberEnum['member']格式访问枚举成员值。

  1. enum AppStatus {
  2. ACTIVE = 'ACT',
  3. INACTIVE = 'INACT',
  4. ONHOLD = 'HLD'
  5. }
  6. AppStatus.ACTIVE //ACT
  7. AppStatus.INACTIVE //INACT
  8. AppStatus['ACTIVE'] //ACT
  9. //Never use numbers with string based enums
  10. AppStatus[0] //undefined

1.3)作为函数参数的枚举

要在函数中传递枚举,请声明枚举本身的参数类型。

  1. enum AppStatus {
  2. ACTIVE = 'ACT',
  3. INACTIVE = 'INACT',
  4. ONHOLD = 'HLD'
  5. }
  6. function checkStatus(status: AppStatus): void {
  7. console.log(status);
  8. }
  9. checkStatus(AppStatus.ONHOLD);

2)传统的基于数字的枚举

尽管不建议这样做,但您可能会遇到需要的情况。 因此,让我们快速学习。

2.1)语法

语法很简单,很老套。 由于尚未初始化值,因此,转译器会生成查找表,并以数组索引的方式分配值(从零开始,然后为每个成员加一)。

  1. enum AppStatus {
  2. ACTIVE, //0
  3. INACTIVE, //1
  4. ONHOLD //2
  5. }

如果要以其他任何数字开头,则将其分配给第一个枚举成员。 接下来的所有成员将通过一个一个的递增来获取值。

  1. enum AppStatus {
  2. ACTIVE = 5, //5
  3. INACTIVE, //6
  4. ONHOLD //7
  5. }

2.2)访问枚举成员值

由于这些是基于数字的枚举,因此您也可以使用enum[index_number]格式以及Enum.memberEnum['member']格式。

  1. enum AppStatus {
  2. ACTIVE,
  3. INACTIVE,
  4. ONHOLD
  5. }
  6. console.log(AppStatus.ACTIVE); //0
  7. console.log(AppStatus['INACTIVE']); //1
  8. console.log(AppStatus[0]); //ACTIVE

2.3)作为函数参数的枚举

要在函数中传递枚举,请声明枚举本身的参数类型。

  1. enum AppStatus {
  2. ACTIVE,
  3. INACTIVE,
  4. ONHOLD
  5. }
  6. function checkStatus(status: AppStatus): void {
  7. console.log(status);
  8. }
  9. checkStatus(AppStatus.ONHOLD); //2

请在最后一个语句中查看打印的'2'值。 在大多数情况下,它不是很有用,因此,首选并推荐基于字符串的枚举。

将我的问题放在评论部分。

学习愉快!