I write a IsEqual generic type like that :
type IsEqual<T, U> = T extends U
? U extends T
? true
: false
: false
type Test1 = IsEqual<number, 3> // false, ok
type Test2 = IsEqual<true, false> // false, ok
type Test3 = IsEqual<boolean, true> // boolean -> ?
type Test4 = IsEqual<true, boolean> // boolean -> ?
What happens here ?
And how to reliably check if a type is the exact same as another ? (not a subtype)