diff --git a/mypy/checkexpr.py b/mypy/checkexpr.py index 2e5cf6e544d5..bbfc40b2a3ec 100644 --- a/mypy/checkexpr.py +++ b/mypy/checkexpr.py @@ -1926,6 +1926,17 @@ def analyze_type_type_callee(self, item: ProperType, context: Context) -> Type: return self.analyze_type_type_callee(tuple_fallback(item), context) if isinstance(item, TypedDictType): return self.typeddict_callable_from_context(item) + if isinstance(item, NoneType): + # NoneType() returns None, so treat it as a callable that returns None + return CallableType( + arg_types=[], + arg_kinds=[], + arg_names=[], + ret_type=NoneType(), + fallback=self.named_type("builtins.function"), + name=None, + from_type_type=True, + ) self.msg.unsupported_type_type(item, context) return AnyType(TypeOfAny.from_error) diff --git a/test-data/unit/check-classes.test b/test-data/unit/check-classes.test index 498a2c12b6e8..cae6bfb16ea2 100644 --- a/test-data/unit/check-classes.test +++ b/test-data/unit/check-classes.test @@ -3866,6 +3866,24 @@ def f(a: Type[Tuple[int, int]]): a() # E: Cannot instantiate type "type[tuple[int, int]]" [builtins fixtures/tuple.pyi] +[case testTypeUsingTypeCNoneType] +from typing_extensions import assert_type + +[builtins fixtures/tuple.pyi] + +NoneType = type(None) +assert_type(type(None)(), None) +assert_type(NoneType(), None) + +def f(n: type[None]): + assert_type(n(), None) +def g(n: type[NoneType]): # type: ignore[valid-type] + assert_type(n(), None) + +f(NoneType) +g(NoneType) +[out] + [case testTypeUsingTypeCNamedTuple] from typing import Type, NamedTuple N = NamedTuple('N', [('x', int), ('y', int)])