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