1. Web 制作
  2. デザイン
  3. ライティング
コース一覧
TypeScript型設計:オブジェクト・状態・ジェネリクス
リテラル型

TypeScript型設計:オブジェクト・状態・ジェネリクス

interface、optional property、readonly、union・リテラル型、型ガード、ジェネリクスを扱う全23レッスンの型設計コースです。Profile・Work・ApplicationStateを題材に、APIや画面で扱うデータと状態を壊れにくい型として設計します。既存JavaScriptプロジェクトの移行は次のコースで扱います。

1
オブジェクト型とinterface
01. interface15分
02. 省略可能なプロパティ15分
03. readonly15分
04. interfaceとtype15分
05. ネストした型15分
06. オブジェクト配列15分
07. つくる - Work型とProfile型20分
08. 第4章クイズ15分
2
union・リテラル型・型ガード
01. union型15分
02. リテラル型15分
03. 状態のunion15分
04. typeofで絞り込む15分
05. inと判別で絞り込む15分
06. 状態で表示を切り替える15分
07. つくる - 状態の型表現20分
08. 第5章クイズ15分
3
ジェネリクス入門
01. なぜジェネリクスか10分
02. ジェネリック関数15分
03. 配列を返す汎用関数15分
04. 制約付きジェネリクス15分
05. 組み込みのジェネリクス15分
06. つくる - 汎用フィルタ関数20分
07. 第6章クイズ15分

リテラル型

値そのものを型として書く

型名の代わりに、値をそのまま書けます。

TypeScript

let category: "web"; category = "web"; category = "design"; // エラー Type '"design"' is not assignable to type '"web"'.

"web" という型は、"web" という文字列 1 つだけを許す型です。これをリテラル型と呼びます。リテラルとは、コードに直接書いた値そのもののことです。

これだけだと使い道がありませんが、前回の union と組み合わせると一気に実用になります。

union にすると選択肢の一覧になる

ゆめさくの作品には、カテゴリが 3 つあります。Web 制作、デザイン、ライティングの 3 つです。これを string で持つと、こう書けてしまいます。

TypeScript

let category: string = "desgin";

打ち間違いですが、string から見れば立派な文字列なので何も起きません。表示のときになって初めて、どのカテゴリにも当てはまらないと気づきます。

リテラル型を union で並べると、選べる値そのものを型にできます。

TypeScript

type WorkCategory = "web" | "design" | "writing"; let category: WorkCategory = "design"; category = "desgin"; // エラー Type '"desgin"' is not assignable to type 'WorkCategory'.

打ち間違いが、実行する前に止まりました。

エディタが候補を出してくれる

もう 1 つの効果があります。WorkCategory の値を書こうとすると、エディタが "web" "design" "writing" を候補として出します。

TypeScript

function setCategory(category: WorkCategory): void { console.log(category); } setCategory("writing");

何を渡せばよいかを覚えておく必要がなくなります。型が仕様書の役をしてくれる、というのはこういうことです。

数値や真偽値でも書ける

リテラル型は文字列だけのものではありません。

TypeScript

type Rating = 1 | 2 | 3 | 4 | 5; type AlwaysTrue = true;

評価の星の数のように、取りうる値が決まっているものは同じ形で書けます。

手を動かす

演習では、カテゴリを受け取って日本語のラベルを返す関数を書きます。中身の分岐はすでに書いてあるので、カテゴリの型を自分で定義して、引数に付けてください。定義した型に無い文字列を渡そうとすると、その場で止まります。

要件

  1. WorkCategory という型エイリアスを定義する
  2. 許す値は "web" "design" "writing" の 3 つだけにする
  3. 引数 category に WorkCategory を付ける

入出力例

categoryLabel("web") → "Web制作" categoryLabel("design") → "デザイン" categoryLabel("writing") → "ライティング"

ヒント

型エイリアスは `type` から始めて名前を書き、その先に型の中身を書きます

型の中身には、型名の代わりにダブルクオートで囲んだ値そのものを書けます

3 つの値を縦棒でつなぐと、その 3 つだけを許す型になります

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/08/06

関連レッスン

  • 状態のunion

    通信状態の型を定義し、画面の状態を型で列挙できるようになります。

  • typeofで絞り込む

    入力の型で処理を分け、分岐の中で型を確定できるようになります。

  • inと判別で絞り込む

    公開作品と下書き作品を見分け、オブジェクトの種類を型で判別できるようになります。

  • 状態で表示を切り替える

    状態別のメッセージ関数を書き、unionと分岐で全パターンを網羅できるようになります。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • 評価出力品質を数値化して継続改善する活動
  • 関数処理に名前を付けて再利用できる単位
  • 引数位置引数=順番で渡す。
main.ts
学習モード
エディタを読み込んでいます

メモ

リテラル型

⌘S で保存