Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/test_typing_extensions.py
Original file line number Diff line number Diff line change
Expand Up @@ -7819,6 +7819,10 @@ def test_or(self):
self.assertEqual(Alias | None, Union[Alias, None])
self.assertEqual(Alias | (int | str), Union[Alias, int | str])
self.assertEqual(Alias | list[float], Union[Alias, list[float]])

if sys.version_info >= (3, 12):
Alias2 = typing.TypeAliasType("Alias2", str)
self.assertEqual(Alias | Alias2, Union[Alias, Alias2])
else:
with self.assertRaises(TypeError):
Alias | int
Expand Down
29 changes: 21 additions & 8 deletions src/typing_extensions.py
Original file line number Diff line number Diff line change
Expand Up @@ -3827,14 +3827,27 @@ def __ror__(self, other):
TypeAliasType = typing.TypeAliasType
# 3.8-3.13
else:
def _is_unionable(obj):
"""Corresponds to is_unionable() in unionobject.c in CPython."""
return obj is None or isinstance(obj, (
type,
_types.GenericAlias,
_types.UnionType,
TypeAliasType,
))
if sys.version_info >= (3, 12):
# 3.12-3.14
def _is_unionable(obj):
"""Corresponds to is_unionable() in unionobject.c in CPython."""
return obj is None or isinstance(obj, (
type,
_types.GenericAlias,
_types.UnionType,
typing.TypeAliasType,
TypeAliasType,
))
else:
# 3.8-3.11
def _is_unionable(obj):
"""Corresponds to is_unionable() in unionobject.c in CPython."""
return obj is None or isinstance(obj, (
type,
_types.GenericAlias,
_types.UnionType,
TypeAliasType,
))

if sys.version_info < (3, 10):
# Copied and pasted from https://github.com/python/cpython/blob/986a4e1b6fcae7fe7a1d0a26aea446107dd58dd2/Objects/genericaliasobject.c#L568-L582,
Expand Down
Loading