迷ったらコレ!TypeScriptでEnumの値の存在確認をマスターしよう

2024-04-02

TypeScriptで列挙型に値が存在するかどうかを確認するには、いくつかの方法があります。

方法

  1. in演算子を使う
enum MyEnum {
  Value1,
  Value2,
  Value3,
}

const value = "Value2";

if (value in MyEnum) {
  console.log("存在します");
} else {
  console.log("存在しません");
}
  1. Object.values()を使う
enum MyEnum {
  Value1,
  Value2,
  Value3,
}

const value = "Value2";

const values = Object.values(MyEnum) as string[];

if (values.includes(value)) {
  console.log("存在します");
} else {
  console.log("存在しません");
}
  1. enumの型ガードを使う
enum MyEnum {
  Value1,
  Value2,
  Value3,
}

const value: MyEnum = "Value2";

if (typeof value === "number" && MyEnum[value] !== undefined) {
  console.log("存在します");
} else {
  console.log("存在しません");
}

補足

  • 上記の例では、文字列型の値を比較していますが、数値型の値を比較することも可能です。
  • 列挙型にnullやundefinedが含まれている場合、in演算子Object.values()を使う方法では、それらの値も存在すると判定されます。
  • 型ガードを使う方法は、列挙型にnullやundefinedが含まれている場合でも、それらの値を除外して比較することができます。



// 列挙型の定義
enum MyEnum {
  Value1,
  Value2,
  Value3,
}

// 値の存在確認
const value1 = "Value1";
const value2 = "Value4";

// in演算子を使う
if (value1 in MyEnum) {
  console.log(`${value1}は存在します`);
} else {
  console.log(`${value1}は存在しません`);
}

if (value2 in MyEnum) {
  console.log(`${value2}は存在します`);
} else {
  console.log(`${value2}は存在しません`);
}

// Object.valuesを使う
const values = Object.values(MyEnum) as string[];

if (values.includes(value1)) {
  console.log(`${value1}は存在します`);
} else {
  console.log(`${value1}は存在しません`);
}

if (values.includes(value2)) {
  console.log(`${value2}は存在します`);
} else {
  console.log(`${value2}は存在しません`);
}

// 型ガードを使う
const value3: MyEnum = "Value1";
const value4: MyEnum = "Value4";

if (typeof value3 === "number" && MyEnum[value3] !== undefined) {
  console.log(`${value3}は存在します`);
} else {
  console.log(`${value3}は存在しません`);
}

if (typeof value4 === "number" && MyEnum[value4] !== undefined) {
  console.log(`${value4}は存在します`);
} else {
  console.log(`${value4}は存在しません`);
}
Value1は存在します
Value4は存在しません
Value1は存在します
Value4は存在しません
Value1は存在します
Value4は存在しません



TypeScriptで列挙型に値が存在するかどうかを確認するその他の方法

hasOwnPropertyを使う

enum MyEnum {
  Value1,
  Value2,
  Value3,
}

const value = "Value2";

if (MyEnum.hasOwnProperty(value)) {
  console.log("存在します");
} else {
  console.log("存在しません");
}

typeof演算子を使う

enum MyEnum {
  Value1,
  Value2,
  Value3,
}

const value = "Value2";

if (typeof MyEnum[value] === "number") {
  console.log("存在します");
} else {
  console.log("存在しません");
}

列挙型の値を配列に変換して比較する

enum MyEnum {
  Value1,
  Value2,
  Value3,
}

const value = "Value2";

const values = Object.keys(MyEnum).map(key => MyEnum[key]);

if (values.includes(value)) {
  console.log("存在します");
} else {
  console.log("存在しません");
}

テンプレートリテラルを使う

enum MyEnum {
  Value1,
  Value2,
  Value3,
}

const value = "Value2";

const values = `${MyEnum.Value1} ${MyEnum.Value2} ${MyEnum.Value3}`;

if (values.includes(value)) {
  console.log("存在します");
} else {
  console.log("存在しません");
}

javascript typescript enums


【2024年最新版】JavaScriptで二次元配列を扱うためのベストプラクティス

これは最もシンプルで分かりやすい方法です。以下のように、内側の配列をカンマで区切って、外側の配列を作成します。このコードは、3行3列の二次元配列を作成します。Array. prototype. map()を使用して、二次元配列を作成することもできます。以下のように、内側の配列を生成する関数を受け取り、その関数を各要素に適用します。...


JavaScript、jQuery、Twitter Bootstrapで実現!複数モーダルオーバーレイの完全ガイド

ウェブページにおいて、モーダルウィンドウは重要な役割を果たします。モーダルウィンドウは、ユーザーの注目を特定の情報に集中させるために使用されるポップアップウィンドウです。通常、モーダルウィンドウは単独で表示されますが、状況によっては複数のモーダルウィンドウを重ねて表示することが必要になる場合があります。...


Angular, TypeScript, RxJS で Observable をインポートする:知っておきたいポイント

Angular、TypeScript、RxJSを使用する際、Observableを適切にインポートすることは重要です。ここでは、状況に応じて最適なインポート方法をいくつかご紹介します。個別インポート必要なObservableとオペレータのみを個別にインポートする方法です。最も簡潔で、バンドルサイズを小さく抑えることができます。...


Angular 2 コンポーネントの深い理解:テンプレート、スタイルシート、メタデータなどを徹底解説!

Angular 2でコンポーネントを使用しようとした際に、「component」要素が認識されないというエラーが発生することがあります。この問題は、いくつかの原因によって発生する可能性があります。原因この問題の主な原因は以下の通りです。@Component デコレータの誤り...


React で要素の表示状態を監視? Intersection Observer で簡単解決!

getBoundingClientRect() を使用する最も基本的な方法は、getBoundingClientRect() メソッドを使用することです。このメソッドは、要素の境界ボックスに関する情報を取得します。この情報を使用して、要素がウィンドウ内に表示されているかどうかを判断できます。...