Object.values() メソッドを使ってEnumの値の名前を取得する

2024-04-02

TypeScriptにおけるEnumの値の名前を取得する方法

ここでは、Enumの値の名前を取得する3つの方法について解説します。

enum キーワード

最もシンプルな方法は、enum キーワードを使用する方法です。

enum MyEnum {
  A = 1,
  B = 2,
  C = 3,
}

const aName = MyEnum.A; // "A"
const bName = MyEnum.B; // "B"
const cName = MyEnum.C; // "C"

この方法では、Enumの値の名前は、enum キーワードとドット記法を使って直接参照できます。

Object.keys() メソッドを使用して、Enumのすべてのキーを取得することもできます。

enum MyEnum {
  A = 1,
  B = 2,
  C = 3,
}

const names: string[] = Object.keys(MyEnum); // ["A", "B", "C"]

この方法では、Object.keys() メソッドによって取得されたキーをループ処理することで、Enumのすべての値の名前を取得できます。

enum MyEnum {
  A = 1,
  B = 2,
  C = 3,
}

const values: number[] = Object.values(MyEnum); // [1, 2, 3]

Enumの値の名前を取得するには、上記3つの方法を使用できます。それぞれの特徴を理解して、状況に応じて使い分けてください。




enum キーワード

enum MyEnum {
  A = 1,
  B = 2,
  C = 3,
}

const aName = MyEnum.A; // "A"
const bName = MyEnum.B; // "B"
const cName = MyEnum.C; // "C"

console.log(aName, bName, cName); // "A B C"

Object.keys()

enum MyEnum {
  A = 1,
  B = 2,
  C = 3,
}

const names: string[] = Object.keys(MyEnum); // ["A", "B", "C"]

console.log(names); // ["A", "B", "C"]
enum MyEnum {
  A = 1,
  B = 2,
  C = 3,
}

const values: number[] = Object.values(MyEnum); // [1, 2, 3]

console.log(values); // [1, 2, 3]

これらのサンプルコードを実行することで、Enumの値の名前を取得する方法をより理解することができます。




逆引きマップ

Enumの値と名前を逆引きするためのマップを作成する方法です。

enum MyEnum {
  A = 1,
  B = 2,
  C = 3,
}

const nameMap: Record<number, string> = {
  [MyEnum.A]: "A",
  [MyEnum.B]: "B",
  [MyEnum.C]: "C",
};

const aName = nameMap[MyEnum.A]; // "A"
const bName = nameMap[MyEnum.B]; // "B"
const cName = nameMap[MyEnum.C]; // "C"

console.log(aName, bName, cName); // "A B C"

この方法では、Enumの値をキーとして、名前を値としてマップを作成しておきます。その後、Enumの値から名前を取得するには、マップから値を取得するだけです。

テンプレートリテラルを使用して、Enumの値と名前を連想配列に変換する方法です。

enum MyEnum {
  A = 1,
  B = 2,
  C = 3,
}

const names = {
  ...(function () {
    const keys = Object.keys(MyEnum) as (keyof typeof MyEnum)[];
    return keys.reduce((acc, key) => {
      acc[MyEnum[key]] = key;
      return acc;
    }, {} as Record<number, string>);
  })(),
};

const aName = names[MyEnum.A]; // "A"
const bName = names[MyEnum.B]; // "B"
const cName = names[MyEnum.C]; // "C"

console.log(aName, bName, cName); // "A B C"

この方法では、テンプレートリテラルを使用して、Enumの値と名前を連想配列に変換します。その後、Enumの値から名前を取得するには、連想配列から値を取得するだけです。

Enumを拡張して、getName() メソッドのような、名前を取得するためのメソッドを追加する方法です。

enum MyEnum {
  A = 1,
  B = 2,
  C = 3,
}

Object.defineProperty(MyEnum, "getName", {
  value: function (this: MyEnum): string {
    return this.toString();
  },
});

const aName = MyEnum.A.getName(); // "A"
const bName = MyEnum.B.getName(); // "B"
const cName = MyEnum.C.getName(); // "C"

console.log(aName, bName, cName); // "A B C"

この方法では、Object.defineProperty() メソッドを使用して、EnumにgetName() メソッドを追加します。その後、Enumの値から名前を取得するには、getName() メソッドを呼び出すだけです。

補足

  • 上記で紹介した方法は、TypeScript 2.4以降で使用できます。
  • TypeScript 4.0以降では、enum キーワードを使用して、Enumの値の名前を直接取得することができます。
enum MyEnum {
  A = 1,
  B = 2,
  C = 3,
}

const aName = MyEnum.A; // "A"

console.log(aName); // "A"

enums typescript


インターフェース、型パラメーター、型ガードも活用!TypeScriptで基底クラスのメンバーにアクセスする

基底クラスのメンバーには、以下の2種類があります。プロパティ: データを表す変数のようなものです。メソッド: 処理を実行する関数のようなものです。基底クラスのメンバーにアクセスする場所は、以下の2つが考えられます。派生クラス: 基底クラスを継承したクラスです。...


TypeScript/JavaScript プロジェクトのコード品質を向上させるための TSLint

ただし、すべてのファイルやディレクトリを TSLint の解析対象とする必要はありません。 特定のディレクトリやファイルは、解析から除外したい場合があります。このチュートリアルでは、TypeScript および JavaScript プロジェクトで特定のディレクトリまたはファイルを TSLint の解析から除外する方法を、わかりやすく日本語で解説します。...


TypeScript 型とインターフェースの違いを理解する

型型は、変数や関数の値の制約を定義するために使用されます。プリミティブ型 (例: number、string、boolean)、ユニオン型、タプル型、ジェネリック型など、さまざまな型があります。型エイリアスを使用して、既存の型の別名を作成することもできます。...


「Property 'catch' does not exist on type 'Observable'」エラーの解決方法:その他

JavaScript、Angular、TypeScriptにおける非同期処理でObservableを使用する際、"Property 'catch' does not exist on type 'Observable<any>'" というエラーが発生することがあります。これは、Observableオブジェクトにはcatchメソッドが存在しないため発生するエラーです。...


Angular コンポーネントへのサービス注入エラー "EXCEPTION: Can't resolve all parameters for component" の原因と解決策

Angular コンポーネントにサービスを注入しようとすると、"EXCEPTION: Can't resolve all parameters for component" というエラーが発生することがあります。これは、コンポーネントが依存関係として必要なサービスを取得できないために発生します。...


SQL SQL SQL SQL Amazon で見る



TypeScript、Angular、Angular2-Forms で Enum を基づいた Select を実装する

Angular で Enum を基づいた Select を作成することは、データの選択肢を明確かつ簡潔に表現するのに役立ちます。このチュートリアルでは、TypeScript、Angular、Angular2-Forms を使用して、Enum を基づいた Select を実装する方法を段階的に説明します。


JavaScript、配列、TypeScriptで列挙値をラジオボタンに表示する

このチュートリアルを理解するには、以下の知識が必要です。JavaScriptの基本構文列挙型まず、TypeScriptファイルを作成し、以下のコードを追加します。次に、forEachループを使用して、genders配列をループ処理します。このコードは、以下の処理を行います。


TypeScript: EnumとUnionを使いこなして開発効率を向上させる

答え: 状況によって異なります。どちらにも利点と欠点があり、使い分けが必要です。複数の型をまとめて扱える型です。例えば、以下のように、数値型と文字列型を共用体で表現できます。名前付きの定数を定義できる型です。例えば、以下のように、色の名前を列挙型で表現できます。