Вам необходимо разыграть type1.a
опору Enum2
.Для этого вам нужно использовать «Type Guard».
Вот пример с вашим кодом:
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
};
}
попробуйте
Когда функция isEnum2
используется в блоке if
, пропеллер type1.a
становится типа Enum2
только внутри этого блока if
.
Примечание: вы можете заменитьсодержимое в isEnum2
с использованием цикла for..in
, если вы используете ES2017 или выше, используя Object.values
:
return Object.values(Enum2).indexOf(value) > -1;
попробуйте (неt работает в www.typescriptlang.org)
Более подробная информация о Type Guards