TypeScriptでは数値型のenum
を以下のように定義されます。
enum Mammal {
Human,
Monkey,
Lion,
Bear,
};
TypeScript5以前で、enum
の型を持つ値はnumber
側のように振る舞っていました。
let mammal: Mammal = Mammal.Human
mammal = 1000;
実際にMammalが取る数値は0
、1
、2
、3
ですが、任意の数値を代入することが可能になっていました。
TypeScript5ではこれが改善されてエラーが出るようになりました。
let mammal: Mammal = Mammal.Human
// エラー発生!
mammal = 1000;
これまではenum
を用いた型を使っても大した制約を課せませんでしたが、今回の変更でenum
に基づいた型、例をもとにするとMammal.Human | Mammal.Monkey | Mammal.Lion | Mammal.Bear
のようなある程度の制約を持つ型として扱えるようになりました。
他にもデメリットはいくつか残っているのでこれによってenum
を積極的に使いたいとはなりませんが、徐々に期待する動作に近づいているので数年後にはどのような変化が訪れているか楽しみです。
この記事はこのPRを参考に作成しました。