LoginSignup
0
1

TypeScriptのリテラル型を使った型安全なコード

Posted at

はじめに

リテラル型とは、特定の値を型として扱うことができる型のことです。JavaScriptの基本データ型(例えば、文字列や数値)をそのまま型として使用できるのがリテラル型です。リテラル型を使うことで、特定の値のみを許容する変数や関数の引数を定義することができます。本記事では、リテラル型について詳しく解説し、具体的な使用例を紹介します。

リテラル型の基本

リテラル型は、特定の値のみを許容する型です。以下に、リテラル型の基本的な例を示します。

文字列リテラル型

文字列リテラル型は、特定の文字列のみを許容する型です。

let direction: "Up" | "Down" | "Left" | "Right";

direction = "Up"; // OK
direction = "Down"; // OK
direction = "North"; // エラー: 型 '"North"' を型 '"Up" | "Down" | "Left" | "Right"' に割り当てることはできません。

数値リテラル型

数値リテラル型は、特定の数値のみを許容する型です。

let one: 1;
one = 1; // OK
one = 2; // エラー: 型 '2' を型 '1' に割り当てることはできません。

ブールリテラル型

ブールリテラル型は、true または false のみを許容する型です。

let isTrue: true;
isTrue = true; // OK
isTrue = false; // エラー: 型 'false' を型 'true' に割り当てることはできません。

リテラル型の用途

リテラル型は、特定の値のみを許容することで、コードの安全性と可読性を向上させるために使用されます。具体的には、以下のような用途があります。

定数オブジェクトの定義

リテラル型を使用して、定数オブジェクトを定義することができます。これにより、オブジェクトのプロパティが特定の値を持つことを保証できます。

const Suit = {
    Club: "Club",
    Diamond: "Diamond",
    Heart: "Heart",
    Spade: "Spade",
} as const;

type Suit = typeof Suit[keyof typeof Suit];

ここで Suit"Club" | "Diamond" | "Heart" | "Spade" というリテラル型のユニオンを持ちます。

関数の引数にリテラル型を使用

関数の引数としてリテラル型を使用することで、特定の値のみを許容する関数を定義できます。

function move(direction: "Up" | "Down" | "Left" | "Right") {
    // 関数の実装
}

move("Up"); // OK
move("Down"); // OK
move("North"); // エラー: 型 '"North"' を型 '"Up" | "Down" | "Left" | "Right"' に割り当てることはできません。

リテラル型の型推論

TypeScriptは、リテラル型を使って型推論を行うことができます。as const を使用すると、オブジェクトのプロパティがリテラル型として推論されます。

const suit = {
    Club: "Club",
    Diamond: "Diamond",
    Heart: "Heart",
    Spade: "Spade",
} as const;

type Suit = typeof suit[keyof typeof suit];
// Suitは "Club" | "Diamond" | "Heart" | "Spade" 型

この例では、suit オブジェクトの各プロパティがリテラル型として推論され、Suit 型は "Club" | "Diamond" | "Heart" | "Spade" となります。

まとめ

リテラル型は、特定の値のみを許容する型であり、コードの安全性と可読性を向上させるために非常に有用です。TypeScriptでは、文字列、数値、ブール値などをリテラル型として扱うことができ、これを活用することで型安全なコードを記述することができます。

0
1
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
0
1