оператор === всегда будет возвращать «ложь», так как типы не имеют перекрытия - PullRequest
0 голосов
/ 23 января 2019

У меня есть этот код

enum Example {
  First = "First",
  Second = "Second"
}

let a = [1, 2];

let newStatus: Example = Example.First;

a.forEach(i => {
  newStatus = Example.Second;
});

if (newStatus === Example.Second) {
  // do something
}

Ожидается: без ошибок

Actual: Error: [ts] Это условие всегда возвращает false, поскольку типы «Example.First» и «Example.Second» не перекрываются. [2367]

1 Ответ

0 голосов
/ 19 апреля 2019

В соответствии с комментарием @ titian-cernicova-dragomir и ответом на Почему логическое значение становится истинным? вы можете поместить оператор приведения, чтобы заставить компилятор обрабатывать перечисление как перечисление, а не простопоследнее значение перечисления, которое, как он думал, было присвоено.

Итак, в вашем случае вы можете изменить строку 8 на

let newStatus: Example = Example.First as Example;

Или, если это не исправит, выможет изменить само сравнение

if (newStatus === (Example.Second as Example)) {
  // do something
}

Я предпочитаю менять сравнение, так как это строка, над которой работает компилятор, но это полностью зависит от того, сколько у вас сравнений, сколько у вас назначений и какиечувствует себя более понятным для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...