TypeScript 枚举

摘要:在本教程中,您将了解 TypeScript 枚举类型以及如何有效地使用它。

什么是枚举

枚举是一组命名常量值。Enum 代表枚举类型。

要定义枚举,请按照以下步骤操作

  • 首先,使用enum关键字后跟枚举的名称。
  • 然后,为枚举定义常量值。

以下显示了定义枚举的语法

enum name {constant1, constant2, ...};Code language: TypeScript (typescript)

在此语法中,constant1constant2等也称为枚举的成员。

TypeScript 枚举类型示例

以下示例创建一个表示一年中月份的枚举

enum Month {
    Jan,
    Feb,
    Mar,
    Apr,
    May,
    Jun,
    Jul,
    Aug,
    Sep,
    Oct,
    Nov,
    Dec
};Code language: TypeScript (typescript)

在此示例中,枚举名称为Month,常量值为JanFebMar等。

以下声明一个函数,该函数使用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;
}Code language: TypeScript (typescript)

您可以这样调用它

console.log(isItSummer(Month.Jun)); // trueCode language: JavaScript (javascript)

此示例在枚举中使用包括JanFebMar等常量值,而不是像123等魔法值。这使代码更易于理解。

TypeScript 枚举的工作原理

最佳实践是在代码中使用枚举定义的常量值。

但是,以下示例将数字而不是枚举传递给isItSummer()函数。并且它有效。

console.log(isItSummer(6)); // trueCode language: JavaScript (javascript)

此示例使用数字(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 = {}));Code language: TypeScript (typescript)

您可以将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
}Code language: TypeScript (typescript)

输出表明 TypeScript 枚举在 JavaScript 中是一个对象。此对象具有在枚举中声明的命名属性。例如,Jan0Feb1

生成的 对象还具有数字键,其字符串值表示命名常量。

这就是为什么您可以将数字传递给接受枚举的函数。换句话说,枚举成员既是数字又是定义的常量。

指定枚举成员的数字

TypeScript 根据枚举定义中出现的成员顺序定义枚举成员的数值。例如,Jan取0,Feb取1,依此类推。

可以像这样显式地为枚举的成员指定数字

enum Month {
    Jan = 1,
    Feb,
    Mar,
    Apr,
    May,
    Jun,
    Jul,
    Aug,
    Sep,
    Oct,
    Nov,
    Dec
};Code language: TypeScript (typescript)

在此示例中,Jan常量值取1而不是0。Feb取2,Mar取3,依此类推。

何时使用枚举

当您满足以下条件时,应该使用枚举

  • 有一组小的、密切相关的固定值。
  • 并且这些值在编译时已知。

例如,您可以为批准状态使用枚举

enum ApprovalStatus {
    draft,
    submitted,
    approved,
    rejected
};Code language: TypeScript (typescript)

然后,您可以像这样使用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...');
}Code language: TypeScript (typescript)

总结

  • TypeScript 枚举是一组常量值。
  • 在幕后,枚举是一个 JavaScript 对象,其中包含在枚举定义中声明的命名属性。
  • 当您有一组小的、密切相关的固定值并且在编译时已知时,请使用枚举。
本教程是否有帮助?