メインコンテンツまでスキップ

リテラル型 (literal type)

TypeScriptではプリミティブ型の特定の値だけを代入可能にする型を表現できます。そのような型をリテラル型と呼びます。

たとえば、次の例は数値が代入可能な型注釈です。数値であれば、1でも100でも何でも代入できます。

ts
let x: number;
x = 1;
ts
let x: number;
x = 1;

リテラル型を用いると、1だけが代入可能な型が作れます。

ts
let x: 1;
x = 1;
x = 100;
Type '100' is not assignable to type '1'.2322Type '100' is not assignable to type '1'.
ts
let x: 1;
x = 1;
x = 100;
Type '100' is not assignable to type '1'.2322Type '100' is not assignable to type '1'.

リテラル型として表現できるもの

リテラル型として表現できるプリミティブ型は次のとおりです。

  • boolean型のtrueとfalse
  • number型の値
  • string型の文字列
ts
const isTrue: true = true;
const num: 123 = 123;
const str: "foo" = "foo";
ts
const isTrue: true = true;
const num: 123 = 123;
const str: "foo" = "foo";

リテラル型の用途

一般的にリテラル型はマジックナンバーやステートの表現に用いられます。その際、ユニオン型と組み合わせることが多いです。

ts
let num: 1 | 2 | 3 = 1;
ts
let num: 1 | 2 | 3 = 1;

📄️ ユニオン型

TypeScriptのユニオン型(union type)は「いずれかの型」を表現するものです。

📄️ 判別可能なユニオン型

TypeScriptの判別可能なユニオン型は、ユニオンに属する各オブジェクトの型を区別するための「しるし」がついた特別なユニオン型です。オブジェクトの型からなるユニオン型を絞り込む際に、分岐ロジックが複雑になる場合は、判別可能なユニオン型を使うとコードの可読性と保守性がよくなります。