How to map an enum to another enum in typescript?
10,203
You need to cast the type1.a
prop to Enum2
. To do this you need to use a "Type Guard".
Here is an example with your code:
enum Enum1 {
N = 0,
A = 1,
B = 2
}
enum Enum2 {
A = 1,
B = 2
}
interface Type1 {
a: Enum1;
}
interface Type2 {
a: Enum2;
}
const type1: Type1 = {
a: Enum1.N
};
function isEnum2(value: any): value is Enum2 {
let isEnum2 = false;
for (let key in Enum2) {
if (Enum2[key] === value) {
isEnum2 = true;
}
}
return isEnum2;
}
if (isEnum2(type1.a)) {
const type2: Type2 = {
a: type1.a
};
}
When the isEnum2
function is used in the if
block the prop type1.a
becomes of type Enum2
inside that if
block only.
Note: you could replace the content in the isEnum2
using for..in
loop if you are using ES2017 or higher using Object.values
:
return Object.values(Enum2).indexOf(value) > -1;
try it (Doesn't work in www.typescriptlang.org)
Author by
Alex Wehe
Updated on June 09, 2022Comments
-
Alex Wehe almost 2 years
I want to map one object's property that has an enum type to another object's property that is other enum type.
I've tried with
type1.a as Enum2
orEnum2[type1.a]
with no success.Here is my simplified code problem:
enum Enum1 { N = 0, A = 1, B = 2 } enum Enum2 { A = 1, B = 2 } interface Type1 { a: Enum1; } interface Type2 { a: Enum2; } const type1: Type1 = { a: Enum1.A }; const type2: Type2 = { a: type1.a };
Throws the error:
Type 'Enum1' is not assignable to type 'Enum2'. (property) Type2.a: Enum2