LoginSignup
1
0

More than 1 year has passed since last update.

【TypeScript】enum型からunion型へ書換え

Posted at

はじめに

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)

keyof 演算子

サバイバルTypeScript:keyof型演算子

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0