Переменные типа объединения сужены в результате анализа потока управления при присваивании . Это означает, что линия
const x: EnumA | EnumB = EnumA.HELLO;
заканчивается сужением типа x
до типа EnumA.HELLO
, и считается ошибкой сравнивать два несвязанных типа, таких как EnumA.HELLO
и EnumB.HELLO
.
Если вы хотите предотвратить это, чтобы можно было сравнить x
с EnumA
и EnumB
, вы можете использовать утверждение типа , например:
const x = EnumB.HELLO as EnumA | EnumB;
Тогда сравнение будет работать:
if (x === EnumA.HELLO) { } // okay
Ссылка на код
Но если и EnumA
, и EnumB
сгенерированы внешним источником, и вы знаете, что они будут идентичны, то это похоже на головную боль, позволяющую им сначала выглядеть как разные типы. Я не знаю достаточно о вашем коде, чтобы предложить, как решить эту проблему ... только импортировать EnumA
и игнорировать EnumB
? Объединить EnumA
и EnumB
в один объект и ссылаться только на объединенные EnumAB
? Точно сказать не могу.
В любом случае, надеюсь, это поможет. Удачи!