Open
Description
openedon Dec 30, 2023
π Search Terms
generic type variable intersection union order
π Version & Regression Information
- This is the behavior in every version I tried, and I reviewed the FAQ for entries about Generics
β― Playground Link
π» Code
type Union<A, B> = A | B
type UnionAny<T> = Union<T, any>
type UnionUnknown<T> = Union<unknown, T>
// these should all be the same type but are respectively: any, any, unknown
type UA0 = Union<unknown, any>
// ^?
type UA1 = UnionAny<unknown>
// ^?
type UA2 = UnionUnknown<any>
// ^?
type Intersect<A, B> = A & B
type IntersectAny<T> = Intersect<T, any>
type IntersectNever<T> = Intersect<never, T>
// these should all be the same type but are respectively: never, any, never
type AN0 = Intersect<never, any>
// ^?
type AN1 = IntersectAny<never>
// ^?
type AN2 = IntersectNever<any>
// ^?
π Actual behavior
The types UA0
, UA1
are resolved as any
and UA2
is resolved as unknown
. These all map down to the same union of unknown
and any
, so should all be the same type.
The types AN0
, AN2
are resolved as never
and AN1
resolved as any
. These all map down to be the intersection of any
and never
, so should all be the same type.
π Expected behavior
I expect UA0
, UA1
and UA2
to resolve as the same type (probably any
, but preferably unknown
)
I expect AN0
, AN1
and AN2
to resolve as the same type (probably never
)
Additional information about the issue
No response
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment