迷ったらコレ!TypeScriptでEnumの値の存在確認をマスターしよう
TypeScriptで列挙型に値が存在するかどうかを確認するには、いくつかの方法があります。
方法
- in演算子を使う
enum MyEnum {
Value1,
Value2,
Value3,
}
const value = "Value2";
if (value in MyEnum) {
console.log("存在します");
} else {
console.log("存在しません");
}
- 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("存在しません");
}
- 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