How to compare Enums in TypeScript
There is another way: if you don't want generated javascript code to be affected in any way, you can use type cast:
let e1: E = E.A
let e2: E = E.B
if (e1 as E === e2 as E) {
console.log("equal")
}
In general, this is caused by control-flow based type inference. With current typescript implementation, it's turned off whenever function call is involved, so you can also do this:
let id = a => a
let e1: E = id(E.A)
let e2: E = id(E.B)
if (e1 === e2) {
console.log('equal');
}
The weird thing is, there is still no error if the id
function is declared to return precisely the same type as its agument:
function id<T>(t: T): T { return t; }
Well I think I found something that works:
if (e1.valueOf() === e2.valueOf()) {
console.log("equal")
}
But I'm a bit surprised that this isn't mentioned anywhere in the documentation.