You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Given a class context (eg. class class Foo[T]), mypy fails to infer the generic parameter when used as part of a type alias that is declared in the class context.
Using type aliases within a class can help avoid repetition when complex generics are used throughout the class.
To Reproduce
classX[Y]:
typeZ=list[Y] # produces: error: All type parameters should be declared ("Y" not declared) [valid-type]def__init__(self, val: Y) ->None:
self.val=valdefmake_list(self) ->Z:
return [self.val]
reveal_type(X(123).make_list()) # Revealed type *expected* to be "builtins.list[builtins.int]"# is instead "builtins.list[Any]"
mytypes.py:2: error: All type parameters should be declared ("Y" not declared) [valid-type]
mytypes.py:10: note: Revealed type is "builtins.list[Any]"
Found 1 error in 1 file (checked 1 source file)
Your Environment
Mypy version used: 1.12
Mypy command-line flags: --strict
Mypy configuration options from mypy.ini (and other config files): none
Python version used: 3.12
The text was updated successfully, but these errors were encountered:
Hm, FWIW such use case is explicitly prohibited for old-style type alias syntax (because in old syntax the intent was ambiguous). With new-style syntax this may be OK. In the meantime you can use an easy workaround:
classGen[T]:
typeAlias[S] =Some[Complex[Type[Gen[S]]]]
var: Alias[T] # OK
Bug Report
Given a class context (eg. class
class Foo[T]
), mypy fails to infer the generic parameter when used as part of a type alias that is declared in the class context.Using type aliases within a class can help avoid repetition when complex generics are used throughout the class.
To Reproduce
https://mypy-play.net/?mypy=latest&python=3.12&gist=845d9b12620d3febc625406e2a093ca2
Expected Behavior
The generic parameter
Y
should be inferred from the context of the class where it was specified.It should be noted that pyright is able to deduce
Y
and thereforeZ
. See https://pyright-play.net/?code=MYGwhgzhAEAaDaBNAugLgFDS9ALgTwAcBTaALWgF5oQBLCHJZTbZrAEyIDNoB9HmgHY0cfABQQiITgBpoANzAhU0RAEpoAWgB80AHIB7AUQzZT0CVIB0CkJXmL0raB24BbMAGsiPWvXGTOdW0yEzMsACciHABXcIFoeAtOa0UmdEi5IkUefGJRWFEARgAmAGZVS3cvHzocUVVVIAActual Behavior
Your Environment
--strict
mypy.ini
(and other config files): noneThe text was updated successfully, but these errors were encountered: