これは、TypeScriptでの宣言のマージに関する2番目の投稿です。 前の投稿では、宣言のマージとは何かを確認し、インターフェイスから始めました。 この投稿では、列挙型をマージする方法を見ていきます。

Enumの概要と、それらが役立つ理由については、この投稿を読むことができます。

始めましょう:

enum Department {
  IT, 
  Marketing
}

enum Department {
  HR
}

上記のコードでは、両方の列挙型が同じ名前であるため、 Department、TypeScriptはそれらをマージできるはずですよね? まあ、それほど速くはありません! このままにしておくと、2番目の列挙型宣言で実際にエラーがスローされます。 エラーは次のとおりです。 In an enum with multiple declarations, only one declaration can omit an initializer for its first enum element.

これが意味するのは、指定されていない場合、列挙型要素には自動的に値が割り当てられるということです。 そう IT 最初に Department 列挙型には値が割り当てられます 0Marketing の値が割り当てられます 1. 第二に Department、 以来 HR その列挙型の最初の要素であり、の値も割り当てられます 0. マージすると、両方 ITHR の値は 0 したがって、それは許可されていないため、エラーが発生します。

これを解決するために、列挙型の最初の要素に値を指定できます。 列挙型の後続の要素は、指定されていない場合、値が1つ増加します。

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

の値を指定することにより 1IT、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

それでおしまい。 😎😎