TypeScriptにおける列挙型としての列挙

各列挙は独自のデータ型を作成します。 例として、現在の季節を格納する変数に 型 Season を割り当ててみましょう:

typescriptlet current: Season;

この変数に季節の番号を代入します:

typescriptlet current: Season = Season.Winter;
console.log(current); // 0

季節の番号を手動で指定することもできます:

typescriptlet current: Season = 3;

しかし、例えば文字列など別の型のデータを 代入しようとすると、エラーが発生します:

typescriptlet current: Season = 'str'; // エラーが発生します

残念ながら、値の範囲は追跡されないため、 列挙に存在しない番号を代入することができてしまいます:

typescriptlet current: Season = 7; // エラーは発生しません

typeof 演算子でチェックすると、 この変数は数値型を返します:

typescriptlet current: Season = 3;
console.log(typeof current); // "number"

まとめると、この型のチェックはそれほど厳密ではなく、 その価値は疑わしいと言えます。