Bug Report
There's something about type[None] that (understandably) confuses mypy and makes it start producing nonsense results.
While defining a function that takes arguments of type[None | A | B], mypy is able to narrow to type[None|A] (or type[None|B]) but any attempt to narrow beyond that causes no change in type. This makes it impossible to produce an exhaustive if/elif/else that can assert_never in the else case.
To Reproduce
https://mypy-play.net/?mypy=latest&python=3.11&gist=7b278f392c623c63fd5b576c483a0e3c
Expected Behavior
I should be able to write an elif clause that can assert_type(cls, type[None]).
Actual Behavior
Currently there's no way to narrow a type Union[type[None], T] type. (That I found.)
Your Environment
https://mypy-play.net
Bug Report
There's something about
type[None]that (understandably) confuses mypy and makes it start producing nonsense results.While defining a function that takes arguments of
type[None | A | B], mypy is able to narrow totype[None|A](ortype[None|B]) but any attempt to narrow beyond that causes no change in type. This makes it impossible to produce an exhaustiveif/elif/elsethat can assert_never in the else case.To Reproduce
https://mypy-play.net/?mypy=latest&python=3.11&gist=7b278f392c623c63fd5b576c483a0e3c
Expected Behavior
I should be able to write an
elifclause that canassert_type(cls, type[None]).Actual Behavior
Currently there's no way to narrow a type
Union[type[None], T]type. (That I found.)Your Environment
https://mypy-play.net