TypeScript入門 第9回

TypeScript入門

TypeScriptのEnumとLiteral型をわかりやすく解説

TypeScriptでは、決まった値だけを扱いたい場合があります。

例えば

  • ステータス
  • ユーザー権限
  • APIレスポンス状態

などです。

そのような場合に使われるのが

Enum
Literal型

です。

この記事では

  • Enumとは
  • Literal型とは
  • それぞれの違い
  • 実務での使い方

を解説します。

Enumとは?

Enumは

列挙型

と呼ばれる型です。

決まった値の集合を定義することができます。

enum Status {
  Success,
  Error,
  Loading
}

使用例

let status: Status = Status.Success

内部的には

Success = 0
Error = 1
Loading = 2

のような数値になります。

String Enum

文字列を使うこともできます。

enum Status {
  Success = "success",
  Error = "error",
  Loading = "loading"
}

こちらの方が、実務ではよく使われます。

理由

可読性が高い

からです。

Literal型とは?

Literal型とは

特定の値だけを許可する型

です。

type Status = "success" | "error" | "loading"

使用例

let status: Status = "success"

もし

status = "done"

と書くと

エラー

になります。

EnumとLiteral型の違い

主な違いはこちらです。

特徴EnumLiteral型
値の集合
実行時オブジェクト×
軽量
Union型×

Literal型のメリット

最近のTypeScriptでは、Literal型がよく使われます。

type Role = "admin" | "user" | "guest"

理由

  • シンプル
  • 軽量
  • JavaScriptに近い

ためです。

実務でよくある例

APIレスポンスです。

type ApiStatus = "success" | "error"
type Response = {
  status: ApiStatus
  data?: string
  message?: string
}

使用例

if (res.status === "success") {
  console.log(res.data)
}

const assertion

Literal型を作るテクニックです。

const roles = ["admin","user","guest"] as const

readonly ["admin","user","guest"]

これを使うと

type Role = typeof roles[number]

のように型を作れます。

Enumはいつ使う?

Enumは次のような場合です。

  • C#風の設計
  • 大規模プロジェクト
  • 明確な定数管理

enum Role {
  Admin,
  User
}

Literal型はいつ使う?

最近はこちらが主流です。

type Role = "admin" | "user"

理由

軽量でシンプル

だからです。

まとめ

EnumとLiteral型は

どちらも

決まった値を扱う型

です。

違い

特徴
Enum列挙型
Literal型Union型

最近のTypeScriptでは

Literal型を使うケースが増えています

次回は、TypeScriptのReadonlyとImmutable設計

コメント

タイトルとURLをコピーしました