TypeScript 中的枚举

在 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.memberEnum['member']格式访问枚举成员值。

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)作为函数参数的枚举

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

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,			//0
	INACTIVE,		//1
	ONHOLD			//2
}

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

enum AppStatus {
    ACTIVE = 5,			//5
	INACTIVE,			//6
	ONHOLD				//7
}

2.2)访问枚举成员值

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

enum AppStatus {
    ACTIVE,
	INACTIVE,
	ONHOLD
}

console.log(AppStatus.ACTIVE);		//0
console.log(AppStatus['INACTIVE']);	//1
console.log(AppStatus[0]);			//ACTIVE

2.3)作为函数参数的枚举

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

enum AppStatus {
    ACTIVE,
	INACTIVE,
	ONHOLD
}

function checkStatus(status: AppStatus): void {

	console.log(status);
}

checkStatus(AppStatus.ONHOLD);	//2

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

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