镜像站点 · 本页由第三方 GitHub 只读镜像提供,非 GitHub 官方站点,不接受任何登录或凭据输入。前往 github.com
Skip to content

Incorrect has-type on unpacking of known TypeVarTuple type from classmethod from class with contrained generic #21693

Description

@MeGaGiGaGon

Bug Report

When trying to unpack a tuple of a TypeVarTuple from a class method where that class contains a constrained TypeVar different from the one inhabited by the TypeVarTuple, mypy will issue a has-type error despite reveal_type showing the full correct type.

To Reproduce

https://mypy-play.net/?mypy=master&python=3.14&gist=856510a8671b57985553a6439ee673dc

class Container[T, P: (Literal[True], Literal[False])]:
    def foo(self) -> T:
        raise NotImplementedError

def f[*Ts, P: (Literal[True], Literal[False])](
    container: Container[tuple[*Ts], P],
) -> None:
    result = container.foo()
    reveal_type(result)  # Revealed type is "tuple[*Ts]"
    y = (*result,)  # Cannot determine type of "result"  [has-type]
    # Expected: tuple[*Ts]
    # Actual: tuple[Any, ...]
    reveal_type(y)

Expected Behavior

This code should have no errors, and the type of y should be tuple[*Ts]

Actual Behavior

Despite the reveal_type of result clearly showing tuple[*Ts], mypy issues a has-type error when unpacking it, and the resulting type of y ends up being wrong.

Additional Notes

If you remove the P generic, or make it normal/bound instead of constrained, the code works as expected.

Adding an annotation to result does get rid of the error, however in my actual code the result from foo is a tuple that I unpack like this result, index = container.foo(), so I cannot easily add that annotation. (I can like this result: tuple[*Ts] before the unpacking assignment, but that makes the code uglier.)

Your Environment

  • Mypy version used: Playground 2.1.0 / master
  • Mypy command-line flags: None
  • Mypy configuration options from mypy.ini (and other config files): None
  • Python version used: 3.14

Activity

  1. changed the title [-]Incorrect has-type on unknpacking of known TypeVarTuple type from classmethod from class with contrained generic[/-] [+]Incorrect has-type on unpacking of known TypeVarTuple type from classmethod from class with contrained generic[/+] on Jul 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugmypy got something wrong

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions