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