TypeScript枚举声明和合并

来自菜鸟教程
跳转至:导航、​搜索

这是关于 TypeScript 中声明合并的第二篇文章。 在 上一篇文章 中,我们查看了 声明合并 是什么,并从接口开始。 在这篇文章中,我们将看看如何合并枚举。

有关枚举的介绍以及它们为何有用,您可以阅读这篇文章

让我们开始吧:

enum Department {
  IT, 
  Marketing
}

enum Department {
  HR
}

在我们上面的代码中,由于两个枚举具有相同的名称,Department,TypeScript 应该能够合并它们,对吧? 好吧,没那么快! 如果我们要这样保留它,这实际上会在第二个枚举声明中引发错误。 错误显示:In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element.

这意味着,如果未指定,枚举元素将自动分配值。 因此,第一个 Department 枚举中的 IT 被赋值为 0Marketing 被赋值为 1。 在第二个 Department 中,由于 HR 是该枚举中的第一个元素,因此它也被分配了 0 的值。 合并时,ITHR 都将具有 0 的值,因此这是不允许的错误。

为了解决这个问题,我们可以为枚举中的第一个元素指定一个值。 如果未指定,枚举中的后续元素的值将增加一。

enum Department {
  IT = 1, 
  Marketing // has a value of 2, that is 1 + (IT value)
}

enum Department {
  HR // has an automatically assigned value of 0
}

console.log(Department[1]) // IT
console.log(Department[2]) // Marketing
console.log(Department[0]) // HR

通过将 1 的值指定为 IT,当 HR 被自动赋值为 0 的值时,不会导致任何错误,因为没有其他元素具有该值。

当然,我们也可以为所有元素分配特定的值。

enum Department {
  IT = 5, 
  Marketing = 3
}

enum Department {
  HR = 8
}

console.log(Department[5]) // IT
console.log(Department[3]) // Marketing
console.log(Department[8]) // HR

就是这样。 😎😎