TypeScript列挙型の宣言とマージ
これは、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.
これが意味するのは、指定されていない場合、列挙型要素には自動的に値が割り当てられるということです。 したがって、最初のDepartment
列挙型のIT
には値0
が割り当てられ、Marketing
には1
の値が割り当てられます。 2番目のDepartment
では、HR
がその列挙型の最初の要素であるため、0
の値も割り当てられます。 マージすると、IT
とHR
の両方の値が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
それでおしまい。 😎😎