diff --git a/mypy/typeops.py b/mypy/typeops.py index a0976ee41617..43740c75af40 100644 --- a/mypy/typeops.py +++ b/mypy/typeops.py @@ -528,7 +528,7 @@ def _remove_redundant_union_items(items: list[Type], keep_erased: bool) -> list[ continue if is_proper_subtype( - proper_ti, tj, keep_erased_types=keep_erased, ignore_promotions=True + ti, tj, keep_erased_types=keep_erased, ignore_promotions=True ): duplicate_index = j break diff --git a/test-data/unit/check-recursive-types.test b/test-data/unit/check-recursive-types.test index 418ab5f1f0d5..75f2433c6d8c 100644 --- a/test-data/unit/check-recursive-types.test +++ b/test-data/unit/check-recursive-types.test @@ -923,3 +923,17 @@ def dummy() -> None: pass reveal_type(bar) # N: Revealed type is "def [T <: builtins.dict[builtins.str, builtins.dict[builtins.str, builtins.str]]] (x: T`-1) -> T`-1" [builtins fixtures/dict.pyi] + +[case testAliasRecursiveUnpackMultiple] +from typing import Tuple, TypeVar, Optional + +T = TypeVar("T") +S = TypeVar("S") + +A = Tuple[T, S, Optional[A[T, S]]] +x: A[int, str] + +*_, last = x +if last is not None: + reveal_type(last) # N: Revealed type is "Tuple[builtins.int, builtins.str, Union[Tuple[builtins.int, builtins.str, Union[..., None]], None]]" +[builtins fixtures/tuple.pyi]