TypeScript Enum
摘要:在本教程中,你将了解 TypeScript 枚举类型以及如何有效使用它。
什么是枚举
枚举是一组命名的常量值,enum 代表枚举类型。
要定义枚举,你需要按照以下步骤操作:
- 首先,使用 enum 关键字,后跟枚举的名称。
- 然后,为枚举定义常量值。
以下是定义枚举的语法:
enum name {constant1, constant2, ...};
在这种语法中,constant1
、constant2
等也被称为枚举的成员。
TypeScript 枚举类型示例
下面的例子创建了一个表示一年中各个月份的枚举:
enum Month {
Jan,
Feb,
Mar,
Apr,
May,
Jun,
Jul,
Aug,
Sep,
Oct,
Nov,
Dec
};
在这个例子中,枚举的名称是 Month
,常量值是 Jan
, Feb
, Mar
,以此类推。
下面声明了一个使用 Month
枚举作为 month
参数类型的函数:
function isItSummer(month: Month) {
let isSummer: boolean;
switch (month) {
case Month.Jun:
case Month.Jul:
case Month.Aug:
isSummer = true;
break;
default:
isSummer = false;
break;
}
return isSummer;
}
你可以这样调用它:
console.log(isItSummer(Month.Jun)); // true
这个例子在枚举中使用常量值,包括Jan
, Feb
, Mar
, ...,而不是像1
, 2
, 3
, ...这样的魔法值,使代码更加可读。
TypeScript 枚举是如何工作的
在代码中,使用枚举所定义的常量值是一个好的做法。
然而,下面的例子向isItSummer()
函数传了一个数字而不是一个枚举。并且它是可以正确执行的:
console.log(isItSummer(6)); // true
这个例子使用了一个数字(6
),而不是由 Month
枚举定义的常数,并且它是正确执行的。
让我们检查一下生成的 Month
枚举的 Javascript 代码。
var Month;
(function (Month) {
Month[Month["Jan"] = 0] = "Jan";
Month[Month["Feb"] = 1] = "Feb";
Month[Month["Mar"] = 2] = "Mar";
Month[Month["Apr"] = 3] = "Apr";
Month[Month["May"] = 4] = "May";
Month[Month["Jun"] = 5] = "Jun";
Month[Month["Jul"] = 6] = "Jul";
Month[Month["Aug"] = 7] = "Aug";
Month[Month["Sep"] = 8] = "Sep";
Month[Month["Oct"] = 9] = "Oct";
Month[Month["Nov"] = 10] = "Nov";
Month[Month["Dec"] = 11] = "Dec";
})(Month || (Month = {}));
你可以将 Month
变量输出到控制台:
{
'0': 'Jan',
'1': 'Feb',
'2': 'Mar',
'3': 'Apr',
'4': 'May',
'5': 'Jun',
'6': 'Jul',
'7': 'Aug',
'8': 'Sep',
'9': 'Oct',
'10': 'Nov',
'11': 'Dec',
Jan: 0,
Feb: 1,
Mar: 2,
Apr: 3,
May: 4,
Jun: 5,
Jul: 6,
Aug: 7,
Sep: 8,
Oct: 9,
Nov: 10,
Dec: 11
}
正如你可以清晰地从输出中看到的那样,TypeScript 枚举在 JavaScript 中是一个对象。这个对象具有在枚举中声明的命名属性。例如,Jan
是 0
,而 Feb
是 1
。
生成的对象还具有数字键和字符串值,表示命名常量。
这就是为什么你可以将一个数字传递给接受枚举的函数的原因。换句话说,枚举成员既是数字又是已定义常量。
指定枚举成员的数值
TypeScript 根据枚举定义中出现的成员的顺序,定义了枚举成员的数值。例如,Jan
取 0,Feb
取 1,等等。
我们可以这样为枚举的成员明确地指定数字:
enum Month {
Jan = 1,
Feb,
Mar,
Apr,
May,
Jun,
Jul,
Aug,
Sep,
Oct,
Nov,
Dec
};
在这个例子中,Jan
的常量值取 1 而不是 0,Feb
取 2,Mar
取 3,等等。
什么时候使用枚举
你应该在以下情况下使用一个枚举:
- 有一小组密切相关的固定值
- 而且这些值在编译时就已经知道了。
例如,你可以为审批状态使用一个枚举:
enum ApprovalStatus {
draft,
submitted,
approved,
rejected
};
然后你就可以这样使用 ApprovalStatus
枚举:
const request = {
id: 1,
status: ApprovalStatus.approved,
description: 'Please approve this request'
};
if(request.status === ApprovalStatus.approved) {
// send an email
console.log('Send email to the Applicant...');
}
总结
- TypeScript 枚举是一组常量值。
- 在内部,枚举是一个 JavaScript 对象,在枚举定义中声明了命名属性。
- 当你有一小组紧密相关且在编译时已知的固定值时,请使用枚举。