diff --git a/mypy/typeanal.py b/mypy/typeanal.py index a8d5f1b304fe..f4b12c1c978d 100644 --- a/mypy/typeanal.py +++ b/mypy/typeanal.py @@ -675,6 +675,10 @@ def try_analyze_special_unbound_type(self, t: UnboundType, fullname: str) -> Typ t, code=codes.VALID_TYPE, ) + if self.defining_alias: + self.fail( + "ClassVar[...] can't be used inside a type alias", t, code=codes.VALID_TYPE + ) if len(t.args) == 0: return AnyType(TypeOfAny.from_omitted_generics, line=t.line, column=t.column) if len(t.args) != 1: diff --git a/test-data/unit/check-type-aliases.test b/test-data/unit/check-type-aliases.test index 718d730132ae..5bbb503a578a 100644 --- a/test-data/unit/check-type-aliases.test +++ b/test-data/unit/check-type-aliases.test @@ -1311,3 +1311,10 @@ class Bar(Generic[T]): x: Bar[int] reveal_type(x.var.bar) # N: Revealed type is "__main__.Bar[builtins.int]" [builtins fixtures/tuple.pyi] + +[case testExplicitTypeAliasClassVarProhibited] +from typing import ClassVar +from typing_extensions import TypeAlias + +Foo: TypeAlias = ClassVar[int] # E: ClassVar[...] can't be used inside a type alias +[builtins fixtures/tuple.pyi]