diff --git a/packages/pyright-internal/src/analyzer/typeEvaluator.ts b/packages/pyright-internal/src/analyzer/typeEvaluator.ts
index e712c51753d5..32fd534779a6 100644
--- a/packages/pyright-internal/src/analyzer/typeEvaluator.ts
+++ b/packages/pyright-internal/src/analyzer/typeEvaluator.ts
@@ -4871,7 +4871,9 @@ export function createTypeEvaluator(
         }
 
         if (isTypeVar(type)) {
-            return true;
+            if (type.props?.specialForm || type.props?.typeAliasInfo) {
+                return true;
+            }
         }
 
         // Exempts class types that are created by calling NewType, NamedTuple, etc.
diff --git a/packages/pyright-internal/src/tests/samples/annotations1.py b/packages/pyright-internal/src/tests/samples/annotations1.py
index f9205bb0fcaf..1ef5a03b505b 100644
--- a/packages/pyright-internal/src/tests/samples/annotations1.py
+++ b/packages/pyright-internal/src/tests/samples/annotations1.py
@@ -147,3 +147,15 @@ class ClassJ:
 
 # This should generate an error because format strings aren't allowed.
 x13: f"int"
+
+
+class A:
+    def method1(self):
+        # This should result in an error.
+        x: self
+
+    @classmethod
+    def method2(cls):
+        # This should result in an error.
+        x: cls
+
diff --git a/packages/pyright-internal/src/tests/typeEvaluator1.test.ts b/packages/pyright-internal/src/tests/typeEvaluator1.test.ts
index 578fbc706b4a..43bd8c15bec9 100644
--- a/packages/pyright-internal/src/tests/typeEvaluator1.test.ts
+++ b/packages/pyright-internal/src/tests/typeEvaluator1.test.ts
@@ -978,7 +978,7 @@ test('FunctionMember2', () => {
 test('Annotations1', () => {
     const analysisResults = TestUtils.typeAnalyzeSampleFiles(['annotations1.py']);
 
-    TestUtils.validateResults(analysisResults, 19);
+    TestUtils.validateResults(analysisResults, 21);
 });
 
 test('Annotations2', () => {