typescript - operatorn === kommer alltid att returnera 'false' eftersom typerna inte överlappar
Jag har den här koden
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
}
Förväntat: Inga fel
Faktiskt: Fel: [ts] Detta villkor kommer alltid att returnera 'false' eftersom typerna 'Example.First' och 'Example.Second' inte överlappar. [2367]
Svar #1
Enligt kommentaren av @titian-cernicova-dragomir och svaret på Varför blir boolean true? kan du sätta en typkonverteringsoperator för att tvinga kompilatorn att behandla enumen som enumen, inte bara det sista värdet av enumen som den trodde att det tilldelades.
Så, i ditt fall kan du ändra rad 8 till
let newStatus: Example = Example.First as Example;
Eller, om det inte löser problemet, kan du ändra själva jämförelsen
if (newStatus === (Example.Second as Example)) {
// do something
}
Jag föredrar att ändra jämförelsen eftersom det är raden som kompilatorn spyr över, men det beror helt på hur många jämförelser du har jämfört med hur många tilldelningar du har och vad som känns mer förståeligt för dig.
