Currently, unions created through typing.Union[A, B] and through the
syntax A | B are at runtime instances of completely different types, and they differ in exactly what elements they accept. This is confusing and makes it harder for users to detect unions at runtime.
I propose to proceed in two steps:
Make typing.Union an alias for types.UnionType and make it so types.UnionType[A, B] works, accepting the same types Union accepts now.
Loosen the rules for what the | operator accepts to accept more types that are commonly used in unions.
Linked PRs
gh-105499: Merge typing.Union and types.UnionType #105511
gh-105499: Defer "import warnings" in typing #132061
gh-105499: Avoid using functools.reduce() to reconstruct Union objects #155280