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

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

始めましょう:

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.

これが意味するのは、指定されていない場合、列挙型要素には自動的に値が割り当てられるということです。 したがって、最初のDepartment列挙型のITには値0が割り当てられ、Marketingには1の値が割り当てられます。 2番目の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

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

それでおしまい。 😎😎