Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mypy and Pyright complain when importing new NamedTuple #56

Closed
gshaikov opened this issue Jul 14, 2022 · 6 comments · Fixed by python/typeshed#8295
Closed

Mypy and Pyright complain when importing new NamedTuple #56

gshaikov opened this issue Jul 14, 2022 · 6 comments · Fixed by python/typeshed#8295

Comments

@gshaikov
Copy link

Hi,

I am trying to use generic NamedTuple from the new typing_extensions, however static checkers can't resolve its import.

Below is the code to reproduce and mypy errors as comments.

from typing import TypeVar, Generic

from typing_extensions import NamedTuple  # error: Module "typing_extensions" has no attribute "NamedTuple"

T_co = TypeVar('T_co', covariant=True)

class Foo(NamedTuple, Generic[T_co]):  # error: Class cannot subclass "NamedTuple" (has type "Any")
    bar: T_co

Not sure what the problem is. I see that there's a conditional here that checks for Python 3.11. It might be the case that type checkers can't resolve this statically. This is just a hypothesis though.

Environment

Python 3.8.10

typing_extensions==4.3.0
mypy==0.942
@AlexWaygood
Copy link
Member

I forgot to add it to the typeshed stub for typing_extensions -- the stub is all that the type checker sees :) python/typeshed#8295 should fix the issue.

It might be worth noting, however, that mypy doesn't yet support generic NamedTuples (python/mypy#685) -- my typeshed PR will fix the import issue, but mypy will still emit errors if you try to actually use generic NamedTuples. I know pyright supports generic NamedTuples; not sure about pytype and pyre.

@gshaikov
Copy link
Author

Great, thanks!

AlexWaygood added a commit to python/typeshed that referenced this issue Jul 14, 2022
@gshaikov
Copy link
Author

@AlexWaygood I see the fix was merged. I think the typeshed CI pipeline already ran too since then. How do I get this stub into my env? Thanks.

@JelleZijlstra
Copy link
Member

You have to wait for the next mypy or pyright release. We can probably get this into mypy 0.970 (expected soon), and pyright releases with updated stubs frequently.

@AlexWaygood
Copy link
Member

In the meantime, if you're using mypy, one option is to clone typeshed's master branch and use mypy with the --custom-typeshed-dir option. Pyright might have a similar option you can use to override its vendored copy of typeshed, but I'm not sure.

@gshaikov
Copy link
Author

Great thanks both!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants