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.

Relaterade artiklar