diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts
index 4c1ad31d43ff6..30eb32a7ac48a 100644
--- a/src/compiler/checker.ts
+++ b/src/compiler/checker.ts
@@ -31890,7 +31890,6 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
         reportErrors: boolean,
         containingMessageChain: (() => DiagnosticMessageChain | undefined) | undefined,
     ): readonly Diagnostic[] | undefined {
-
         const errorOutputContainer: { errors?: Diagnostic[], skipLogging?: boolean } = { errors: undefined, skipLogging: true };
         if (isJsxOpeningLikeElement(node)) {
             if (!checkApplicableSignatureForJsxOpeningLikeElement(node, signature, relation, checkMode, reportErrors, containingMessageChain, errorOutputContainer)) {
@@ -31900,10 +31899,10 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
             return undefined;
         }
         const thisType = getThisTypeOfSignature(signature);
-        if (thisType && thisType !== voidType && node.kind !== SyntaxKind.NewExpression) {
+        if (thisType && thisType !== voidType && !(isNewExpression(node) || isCallExpression(node) && isSuperProperty(node.expression))) {
             // If the called expression is not of the form `x.f` or `x["f"]`, then sourceType = voidType
             // If the signature's 'this' type is voidType, then the check is skipped -- anything is compatible.
-            // If the expression is a new expression, then the check is skipped.
+            // If the expression is a new expression or super call expression, then the check is skipped.
             const thisArgumentNode = getThisArgumentOfCall(node);
             const thisArgumentType = getThisArgumentType(thisArgumentNode);
             const errorNode = reportErrors ? (thisArgumentNode || node) : undefined;
diff --git a/tests/baselines/reference/thisTypeInFunctionsNegative.errors.txt b/tests/baselines/reference/thisTypeInFunctionsNegative.errors.txt
index a3a3efafaa6e2..0c9dd0264d248 100644
--- a/tests/baselines/reference/thisTypeInFunctionsNegative.errors.txt
+++ b/tests/baselines/reference/thisTypeInFunctionsNegative.errors.txt
@@ -439,4 +439,10 @@ tests/cases/conformance/types/thisType/thisTypeInFunctionsNegative.ts(178,22): e
     const f4 = async <T>(this: {n: number}, m: number) => m + this.n;
                          ~~~~~~~~~~~~~~~~~
 !!! error TS2730: An arrow function cannot have a 'this' parameter.
+    
+    class Derived3 extends Base2 {
+        f(this: this) {
+            super.polymorphic();
+        }
+    }
     
\ No newline at end of file
diff --git a/tests/baselines/reference/thisTypeInFunctionsNegative.js b/tests/baselines/reference/thisTypeInFunctionsNegative.js
index a3fe0b8ee5940..4c5df4a764867 100644
--- a/tests/baselines/reference/thisTypeInFunctionsNegative.js
+++ b/tests/baselines/reference/thisTypeInFunctionsNegative.js
@@ -177,6 +177,12 @@ c.explicitProperty = (this, m) => m + this.n;
 const f2 = <T>(this: {n: number}, m: number) => m + this.n;
 const f3 = async (this: {n: number}, m: number) => m + this.n;
 const f4 = async <T>(this: {n: number}, m: number) => m + this.n;
+
+class Derived3 extends Base2 {
+    f(this: this) {
+        super.polymorphic();
+    }
+}
 
 
 //// [thisTypeInFunctionsNegative.js]
@@ -332,3 +338,8 @@ c.explicitProperty = (m) => m + this.n;
 const f2 = (m) => m + this.n;
 const f3 = (m) => __awaiter(this, void 0, void 0, function* () { return m + this.n; });
 const f4 = (m) => __awaiter(this, void 0, void 0, function* () { return m + this.n; });
+class Derived3 extends Base2 {
+    f() {
+        super.polymorphic();
+    }
+}
diff --git a/tests/baselines/reference/thisTypeInFunctionsNegative.symbols b/tests/baselines/reference/thisTypeInFunctionsNegative.symbols
index 77b4b6a15a700..d275ba895574b 100644
--- a/tests/baselines/reference/thisTypeInFunctionsNegative.symbols
+++ b/tests/baselines/reference/thisTypeInFunctionsNegative.symbols
@@ -696,3 +696,18 @@ const f4 = async <T>(this: {n: number}, m: number) => m + this.n;
 >m : Symbol(m, Decl(thisTypeInFunctionsNegative.ts, 177, 39))
 >this : Symbol(globalThis)
 
+class Derived3 extends Base2 {
+>Derived3 : Symbol(Derived3, Decl(thisTypeInFunctionsNegative.ts, 177, 65))
+>Base2 : Symbol(Base2, Decl(thisTypeInFunctionsNegative.ts, 128, 1))
+
+    f(this: this) {
+>f : Symbol(Derived3.f, Decl(thisTypeInFunctionsNegative.ts, 179, 30))
+>this : Symbol(this, Decl(thisTypeInFunctionsNegative.ts, 180, 6))
+
+        super.polymorphic();
+>super.polymorphic : Symbol(Base2.polymorphic, Decl(thisTypeInFunctionsNegative.ts, 130, 13))
+>super : Symbol(Base2, Decl(thisTypeInFunctionsNegative.ts, 128, 1))
+>polymorphic : Symbol(Base2.polymorphic, Decl(thisTypeInFunctionsNegative.ts, 130, 13))
+    }
+}
+
diff --git a/tests/baselines/reference/thisTypeInFunctionsNegative.types b/tests/baselines/reference/thisTypeInFunctionsNegative.types
index 36837e3108934..6a3d134f34772 100644
--- a/tests/baselines/reference/thisTypeInFunctionsNegative.types
+++ b/tests/baselines/reference/thisTypeInFunctionsNegative.types
@@ -804,3 +804,19 @@ const f4 = async <T>(this: {n: number}, m: number) => m + this.n;
 >this : typeof globalThis
 >n : any
 
+class Derived3 extends Base2 {
+>Derived3 : Derived3
+>Base2 : Base2
+
+    f(this: this) {
+>f : (this: this) => void
+>this : this
+
+        super.polymorphic();
+>super.polymorphic() : number
+>super.polymorphic : (this: this) => number
+>super : Base2
+>polymorphic : (this: this) => number
+    }
+}
+
diff --git a/tests/cases/conformance/types/thisType/thisTypeInFunctionsNegative.ts b/tests/cases/conformance/types/thisType/thisTypeInFunctionsNegative.ts
index 217fbb9362283..20f59cbfe02a4 100644
--- a/tests/cases/conformance/types/thisType/thisTypeInFunctionsNegative.ts
+++ b/tests/cases/conformance/types/thisType/thisTypeInFunctionsNegative.ts
@@ -178,3 +178,9 @@ c.explicitProperty = (this, m) => m + this.n;
 const f2 = <T>(this: {n: number}, m: number) => m + this.n;
 const f3 = async (this: {n: number}, m: number) => m + this.n;
 const f4 = async <T>(this: {n: number}, m: number) => m + this.n;
+
+class Derived3 extends Base2 {
+    f(this: this) {
+        super.polymorphic();
+    }
+}