はじめに
TypeScriptのenum型には問題点があり、enum型の代替案としてunion型を用いて実装する方法があります。
enum型からunion型への書換えは初めてだったので、書換えた時に調べたことを備忘録も兼ねてまとめました。
ちなみに、enumの問題点は下記の方の記事がとても参考になりました。
結論
書換え方法は下記文献を参考にしました。
サバイバルTypeScript:列挙型(enum)の問題点と代替手段
- enum型
enum Fruit {
ORANGE = "みかん",
APPLE = "りんご",
PEACH = "もも"
}
console.log(FRUIT.ORANGE); // みかん
↓
これを下記のように書換え
↓
- union型
const Fruit = {
ORANGE: "ORANGE",
APPLE: "APPLE",
PEACH: "PEACH",
} as const;
type Fruit = typeof Fruit[keyof typeof Fruit]; // type Fruit= "ORANGE" | "APPLE" | "PEACH"
const FruitName = (name: Fruit): string => {
switch (name) {
case Fruit.ORANGE:
return "みかん";
case Fruit.APPLE:
return "りんご";
case Fruit.PEACH:
return "もも";
}
}
console.log(FruitName(Fruit.ORANGE)); // みかん
参考文献
今回は参考文献が多かったため分類して分けております。
各内容の詳細について下記文献を参考にしてください。
enum
TypeScript DeepDive:Enum
サバイバルTypeScript:列挙型 (enum)
[Typescript] 「なぜ enum の利用が推奨されないのか?」をまとめてみた
サバイバルTypeScript:列挙型(enum)の問題点と代替手段
as const(constアサーション)
TypeScript DeepDive:Type Assertion(型アサーション)
サバイバルTypeScript:constアサーション「as const」 (const assertion)
リテラル
TypeScript DeepDive:リテラル型
サバイバルTypeScript:リテラル型 (literal type)
※パッと見た感じリテラルを使用してなさそうですがas const
で指定することでプロパティがリテラルタイプになります。詳しくはas const
をご確認ください。
typeof 演算子
サバイバルTypeScript:typeof演算子 (typeof operator)