TypeScriptのリテラル型の使用方法

TypeScriptでは型にリテラルを設定できる

TypeScriptでは、変数や関数の型にリテラル型を設定することができます。
リテラル型は、特定の値のセットを表現する型であり、その値以外を受け入れないように制約することができます。

例えば、次のようなリテラル型の使用例があります。

// 文字列リテラル型
let status: 'success' | 'error';
status = 'success'; // OK
status = 'error'; // OK
status = 'warning'; // コンパイルエラー

// 数値リテラル型
let diceRoll: 1 | 2 | 3 | 4 | 5 | 6;
diceRoll = 4; // OK
diceRoll = 7; // コンパイルエラー

// オブジェクトリテラル型
let person: { name: string, age: number };
person = { name: 'Alice', age: 30 }; // OK
person = { name: 'Bob', age: '30' }; // コンパイルエラー

このように、リテラル型を使用することで、特定の値の範囲や形式を厳密に定義し、コードの安全性や信頼性を向上させることができます。

どのような場面でリテラル型を使用するのか

リテラル型は、特定の値のセットを明示的に定義する必要がある場面で非常に便利です。
具体的な使用シーンをいくつか挙げてみます。

1. 固定値の定義:
変数や関数の引数などで、受け入れる値が限定されている場合に使用します。
これにより、プログラムが不正な値を受け入れることを防ぎます。

// 特定の値以外設定できない
let status: 'active' | 'inactive' | 'pending';

// 特定の値以外の引数を渡せない
function setStatus(newStatus: 'active' | 'inactive' | 'pending') {
   // ロジックの実装
}

2. オブジェクトのプロパティのキーの定義:
オブジェクトのプロパティ名が限定されている場合に使用します。

let actionMap: {
   [key in 'start' | 'stop']: () => void
} = {
   start: () => { /* 開始処理 */ },
   stop: () => { /* 停止処理 */ }
};

3. 特定の範囲の数値の定義:
数値型の値が一定の範囲内に限定されている場合に使用します。

let diceRoll: 1 | 2 | 3 | 4 | 5 | 6;

4. 特定の文字列パターンの定義:
正確な文字列パターンが要求される場合に使用します。

let countryCode: 'JP' | 'US' | 'GB';

これらの例では、リテラル型がコードの可読性を高め、不正な値によるバグを防止する役割を果たしています。
特に、API の定義やライブラリのインターフェース、厳密なデータ構造の要件がある場合に活用されることが多いです。