💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# TypeScript 中的枚举 > 原文: [https://howtodoinjava.com/typescript/enums/](https://howtodoinjava.com/typescript/enums/) 在 TypeScript 中,**枚举**是一组命名常量。 尽管它是可选的,但枚举应为**一组命名的相关常量**。 TypeScript 支持传统的枚举和基于字符串的枚举。 ## 1)基于字符串的枚举 让我们从基于字符串的枚举开始,因为与传统枚举相比,它们是推荐的方法。 **始终使用基于字符串的枚举**,直到您有充分的理由选择传统的枚举为止。 #### 1.1)语法 枚举语法与其他语言非常相似,例如 Java。 ```java enum AppStatus { ACTIVE = 'ACTIVE', INACTIVE = 'INACTIVE', ONHOLD = 'ONHOLD' } ``` 查看 JavaScript 中**生成的代码**。 它具有一个生成的查找表,如下所示。 ```java var AppStatus; (function (AppStatus) { AppStatus["ACTIVE"] = "ACTIVE"; AppStatus["INACTIVE"] = "INACTIVE"; AppStatus["ONHOLD"] = "ONHOLD"; })(AppStatus || (AppStatus = {})); ``` #### 1.2)访问枚举成员值 使用`Enum.member`或`Enum['member']`格式访问枚举成员值。 ```java enum AppStatus { ACTIVE = 'ACT', INACTIVE = 'INACT', ONHOLD = 'HLD' } AppStatus.ACTIVE //ACT AppStatus.INACTIVE //INACT AppStatus['ACTIVE'] //ACT //Never use numbers with string based enums AppStatus[0] //undefined ``` #### 1.3)作为函数参数的枚举 要在函数中传递枚举,请声明枚举本身的参数类型。 ```java enum AppStatus { ACTIVE = 'ACT', INACTIVE = 'INACT', ONHOLD = 'HLD' } function checkStatus(status: AppStatus): void { console.log(status); } checkStatus(AppStatus.ONHOLD); ``` ## 2)传统的基于数字的枚举 尽管不建议这样做,但您可能会遇到需要的情况。 因此,让我们快速学习。 #### 2.1)语法 语法很简单,很老套。 由于尚未初始化值,因此,转译器会生成查找表,并以数组索引的方式分配值(从零开始,然后为每个成员加一)。 ```java enum AppStatus { ACTIVE, //0 INACTIVE, //1 ONHOLD //2 } ``` 如果要**以其他任何数字**开头,则将其分配给第一个枚举成员。 接下来的所有成员将通过一个一个的递增来获取值。 ```java enum AppStatus { ACTIVE = 5, //5 INACTIVE, //6 ONHOLD //7 } ``` #### 2.2)访问枚举成员值 由于这些是基于数字的枚举,因此您也可以使用`enum[index_number]`格式以及`Enum.member`或`Enum['member']`格式。 ```java enum AppStatus { ACTIVE, INACTIVE, ONHOLD } console.log(AppStatus.ACTIVE); //0 console.log(AppStatus['INACTIVE']); //1 console.log(AppStatus[0]); //ACTIVE ``` #### 2.3)作为函数参数的枚举 要在函数中传递枚举,请声明枚举本身的参数类型。 ```java enum AppStatus { ACTIVE, INACTIVE, ONHOLD } function checkStatus(status: AppStatus): void { console.log(status); } checkStatus(AppStatus.ONHOLD); //2 ``` 请在最后一个语句中查看打印的`'2'`值。 在大多数情况下,它不是很有用,因此,首选并推荐基于字符串的枚举。 将我的问题放在评论部分。 学习愉快!