列挙型 (enum) の基本
TypeScript で列挙型を定義するには、enum
キーワードを使用します。
enum Fruits {
Apple, //= 0
Banana, //= 1
Orange //= 2
}
console.log(Fruits.Apple); //=> 0
console.log(Fruits[Fruits.Apple]); //=> Apple
デフォルトでは、各要素の値として先頭から順番に 0、1、2 という連番の 整数値 が内部的に割り当てられます(C 言語や Java と同様です)。 この値は任意の数値に変更することができます。
次の例は、ビットフラグとして使用することを想定した enum の定義例です。 各値が 2 のべき乗の値になっていることに注意してください。
enum OpenModes {
Read = 1,
Write = 2,
Append = 4
}
const mode = OpenModes.Read | OpenModes.Write;
if ((mode & OpenModes.Write) == OpenModes.Write) {
console.log('Write フラグが指定されています');
}
enum 値をインライン展開する (Constant enumeration)
enum 定義を行うときに const
キーワードを付加すると、その enum 値を使用した場所に値がハードコードされる形で展開されます(JavaScript のコードに変換するときに、0 や 1 といった値をインライン展開する)。
enum NormalEnum { A, B, C }
const enum ConstEnum { A, B, C }
console.log(NormalEnum.A)
console.log(ConstEnum.A)
上記の TypeScript が JavaScript にトランスパイルされると、enum 値の参照箇所はそれぞれ下記のように出力されます。
// ...省略...
console.log(NormalEnum.A);
console.log(0 /* A */);
ConstEnum.A
という部分は、0 という値でハードコードされているのが分かります。