TypeScript - 列挙型:初級者向けガイド

こんにちは、将来のプログラマーさんたち!今日は、TypeScriptの列挙型(Enums)の素晴らしい世界に飛び込みます。以前にコードを書いたことがないても安心してください – 私はあなたの親切なガイドとしてこの旅を案内します。これから始めましょう!

TypeScript - Enums

列挙型とは?

まず、列挙型の種類に飛び込む前に、まずそれが何であるかを理解しましょう。クローゼットを整理するとしましょう。服には異なるカテゴリーがあるかもしれません:シャツ、パンツ、靴など。TypeScriptの列挙型はこれらのカテゴリーのように – 関連する値を一緒にまとめ、意味のある名前を付けるのに役立ちます。

数値列挙型

数値列挙型はTypeScriptで最も一般的な列挙型です。お気に入りのスーパーヒーローに番号を割り当てるのに似ています。

enum Superheroes {
Superman,
Batman,
WonderWoman,
Flash
}

console.log(Superheroes.Superman);  // 出力: 0
console.log(Superheroes.Batman);    // 出力: 1
console.log(Superheroes.WonderWoman);  // 出力: 2
console.log(Superheroes.Flash);     // 出力: 3

この例では、TypeScriptは自動的に0から始まる番号を割り当てます。スーパーマンは0、バットマンは1、などです。まるで並んでいるスーパーヒーローに順番に番号を振っているようなものです!

でも、別の番号から始めたい場合はどうでしょうか?問題ありません!それもできます:

enum Villains {
Joker = 1,
LexLuthor,
Cheetah,
ReverseFlash
}

console.log(Villains.Joker);        // 出力: 1
console.log(Villains.LexLuthor);    // 出力: 2
console.log(Villains.Cheetah);      // 出力: 3
console.log(Villains.ReverseFlash); // 出力: 4

ここでは、TypeScriptにジョーカーから1から数え始めるように指示し、残りは自動的に続けます。

文字列列挙型

数値が好きじゃない、言葉が好きだという人はどうでしょうか。その場合、文字列列挙型が便利です。ペットにニックネームを付けるのに似ています!

enum PetNames {
Dog = "BUDDY",
Cat = "WHISKERS",
Fish = "BUBBLES",
Bird = "TWEETY"
}

console.log(PetNames.Dog);   // 出力: "BUDDY"
console.log(PetNames.Cat);   // 出力: "WHISKERS"
console.log(PetNames.Fish);  // 出力: "BUBBLES"
console.log(PetNames.Bird);  // 出力: "TWEETY"

文字列列挙型では、各メンバーに値を指定する必要があります。ペットの特別なニックネームを確実に知らせるようなものです!

異種列挙型

時々、人生は単なる数値や単なる文字列だけではありません – 異なるものが混ざっています。異種列挙型はアソートチョコレートの箱のように – さまざまなものが含まれています。

enum MixedBag {
Number = 1,
String = "STRING",
AnotherNumber = 2
}

console.log(MixedBag.Number);        // 出力: 1
console.log(MixedBag.String);        // 出力: "STRING"
console.log(MixedBag.AnotherNumber); // 出力: 2

これは可能ですが、一貫性を保つために列挙型内ではすべて数値またはすべて文字列にするのが一般的に推奨されます。

実行時の列挙型

列挙型の素晴らしい特徴の1つは、実行時に存在することです。これにより、コード内で他のオブジェクトのように使用できます!

enum Fruits {
Apple,
Banana,
Orange
}

function getFruitName(fruit: Fruits): string {
return Fruits[fruit];
}

console.log(getFruitName(Fruits.Apple));  // 出力: "Apple"
console.log(getFruitName(Fruits.Banana)); // 出力: "Banana"

ここでは、列挙型を普通のJavaScriptオブジェクトのように使用しています。まるで魔法の辞書のように、数値を果物の名前に変換できるものです!

コンパイル時の列挙型

列挙型はコンパイル時でも輝きます。TypeScriptはコードが実行される前にエラーをキャッチしてくれます!

enum DaysOfWeek {
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}

let day: DaysOfWeek = DaysOfWeek.Monday;
day = DaysOfWeek.Friday;  // これで問題ありません

// day = "Monday";  // エラー: タイプ '"Monday"' は 'DaysOfWeek' に割り当てられません。

TypeScriptは列挙型に属しない値を代入しようとするとエラーを表示します。まるでクラブの厳しいボーイッシュが週の曜日しか入場を許可しないようなものです!

環境列挙型

環境列挙型は少し特別です。どこか他の場所のコードまたは使用しているライブラリに存在する列挙型についてTypeScriptに伝えるときに使用されます。

declare enum ExternalEnum {
A = 1,
B,
C = 2
}

declareキーワードは、「TypeScript、信じてくれ、この列挙型はどこか他の場所に存在する」と言っているようなものです。TypeScriptで書かれていないコードと一緒に働くときに便利です。

オブジェクトと列挙型

オブジェクトを使わないでどうして列挙型を使うのかと思っているかもしれません。列挙型にはいくつかの利点があります:

// オブジェクトを使用する
const ColorObject = {
Red: 'RED',
Green: 'GREEN',
Blue: 'BLUE'
} as const;

// 列挙型を使用する
enum ColorEnum {
Red = 'RED',
Green = 'GREEN',
Blue = 'BLUE'
}

// オブジェクトでは型宣言が必要
let objColor: keyof typeof ColorObject = 'Red';

// 列挙型ではよりシンプル
let enumColor: ColorEnum = ColorEnum.Red;

列挙型はより良い型安全性を提供し、多くの場合ではより簡潔です。

列挙型を関数パラメータとして使用する

列挙型は関数パラメータとしても非常に便利です。コードが読みやすくなり、エラーを防ぎます:

enum Sizes {
Small,
Medium,
Large
}

function orderCoffee(size: Sizes): string {
switch(size) {
case Sizes.Small:
return "Here's your small coffee!";
case Sizes.Medium:
return "One medium coffee coming right up!";
case Sizes.Large:
return "Large coffee, extra caffeine!";
default:
return "We don't have that size!";
}
}

console.log(orderCoffee(Sizes.Medium));  // 出力: "One medium coffee coming right up!"
// console.log(orderCoffee("Venti"));    // エラー: 引数の型 '"Venti"' は 'Sizes' に割り当てられません。

サイズパラメータとして列挙型を使用することで、関数に渡されるのは有効なサイズのみ確保されます。メニューに固定されたオプションがあるように、どのサイズが利用可能かを混乱させません!

列挙型メソッド

以下は、列挙型を操作するための便利なメソッドの表です:

メソッド 説明
Object.keys() 列挙型のすべてのキーを取得 Object.keys(Sizes)
Object.values() 列挙型のすべての値を取得 Object.values(Sizes)
Object.entries() 列挙型のキーと値のペアを取得 Object.entries(Sizes)
Enum[key] キーに対する値を取得 Sizes[Sizes.Small]
Enum[value] 値に対するキーを取得(数値列挙型の場合) Sizes[0]

これらのメソッドは、さまざまな方法で列挙型を操作するのに役立ちます。例えば、すべての利用可能なサイズを取得するか、サイズの名前をその値から見つけることができます。

そしてここまでで、TypeScriptの列挙型の世界への初めてのステップを踏み出しました。プログラミングは新しい言語を学ぶのと同じで – 練習が必要ですが、すぐに流暢になります。Enum-speakを楽しんでください!そして、アイスクリームの好みのフレーバーのための列挙型を作るかもしれませんね!

Credits: Image by storyset