diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts
index fcb93c45dc1dd..c974e1aef7efe 100644
--- a/src/compiler/checker.ts
+++ b/src/compiler/checker.ts
@@ -46040,7 +46040,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
 
             function isReferenced(node: Node): boolean {
                 if (isTypeReferenceNode(node)) {
-                    return isReferenceToTypeParameter(typeParam, node);
+                    return isReferenceToTypeParameter(typeParam, node) || some(node.typeArguments, isReferenced);
                 }
                 if (isTypeQueryNode(node)) {
                     return isTypeParameterPossiblyReferenced(typeParam, node);
diff --git a/tests/baselines/reference/dependentReturnType11.errors.txt b/tests/baselines/reference/dependentReturnType11.errors.txt
new file mode 100644
index 0000000000000..bec7be35de8d5
--- /dev/null
+++ b/tests/baselines/reference/dependentReturnType11.errors.txt
@@ -0,0 +1,26 @@
+dependentReturnType11.ts(13,9): error TS2322: Type '"woof"' is not assignable to type 'Ret<T>'.
+dependentReturnType11.ts(15,5): error TS2322: Type '"meow"' is not assignable to type 'Ret<T>'.
+
+
+==== dependentReturnType11.ts (2 errors) ====
+    type Foo<T extends boolean> = {
+        name: string,
+        isDog: T,
+    }
+    
+    type Ret<T> =
+        T extends true ? "woof" :
+        T extends false? "meow" :
+        never;
+    
+    function example1<T extends boolean>(param1: T, param2: Foo<T>): Ret<T> {
+        if (param1) {
+            return "woof";
+            ~~~~~~
+!!! error TS2322: Type '"woof"' is not assignable to type 'Ret<T>'.
+        }
+        return "meow"
+        ~~~~~~
+!!! error TS2322: Type '"meow"' is not assignable to type 'Ret<T>'.
+    }
+    
\ No newline at end of file
diff --git a/tests/baselines/reference/dependentReturnType11.symbols b/tests/baselines/reference/dependentReturnType11.symbols
new file mode 100644
index 0000000000000..3c7f86f56a17a
--- /dev/null
+++ b/tests/baselines/reference/dependentReturnType11.symbols
@@ -0,0 +1,46 @@
+//// [tests/cases/compiler/dependentReturnType11.ts] ////
+
+=== dependentReturnType11.ts ===
+type Foo<T extends boolean> = {
+>Foo : Symbol(Foo, Decl(dependentReturnType11.ts, 0, 0))
+>T : Symbol(T, Decl(dependentReturnType11.ts, 0, 9))
+
+    name: string,
+>name : Symbol(name, Decl(dependentReturnType11.ts, 0, 31))
+
+    isDog: T,
+>isDog : Symbol(isDog, Decl(dependentReturnType11.ts, 1, 17))
+>T : Symbol(T, Decl(dependentReturnType11.ts, 0, 9))
+}
+
+type Ret<T> =
+>Ret : Symbol(Ret, Decl(dependentReturnType11.ts, 3, 1))
+>T : Symbol(T, Decl(dependentReturnType11.ts, 5, 9))
+
+    T extends true ? "woof" :
+>T : Symbol(T, Decl(dependentReturnType11.ts, 5, 9))
+
+    T extends false? "meow" :
+>T : Symbol(T, Decl(dependentReturnType11.ts, 5, 9))
+
+    never;
+
+function example1<T extends boolean>(param1: T, param2: Foo<T>): Ret<T> {
+>example1 : Symbol(example1, Decl(dependentReturnType11.ts, 8, 10))
+>T : Symbol(T, Decl(dependentReturnType11.ts, 10, 18))
+>param1 : Symbol(param1, Decl(dependentReturnType11.ts, 10, 37))
+>T : Symbol(T, Decl(dependentReturnType11.ts, 10, 18))
+>param2 : Symbol(param2, Decl(dependentReturnType11.ts, 10, 47))
+>Foo : Symbol(Foo, Decl(dependentReturnType11.ts, 0, 0))
+>T : Symbol(T, Decl(dependentReturnType11.ts, 10, 18))
+>Ret : Symbol(Ret, Decl(dependentReturnType11.ts, 3, 1))
+>T : Symbol(T, Decl(dependentReturnType11.ts, 10, 18))
+
+    if (param1) {
+>param1 : Symbol(param1, Decl(dependentReturnType11.ts, 10, 37))
+
+        return "woof";
+    }
+    return "meow"
+}
+
diff --git a/tests/baselines/reference/dependentReturnType11.types b/tests/baselines/reference/dependentReturnType11.types
new file mode 100644
index 0000000000000..eb3bc3670b621
--- /dev/null
+++ b/tests/baselines/reference/dependentReturnType11.types
@@ -0,0 +1,51 @@
+//// [tests/cases/compiler/dependentReturnType11.ts] ////
+
+=== dependentReturnType11.ts ===
+type Foo<T extends boolean> = {
+>Foo : Foo<T>
+>    : ^^^^^^
+
+    name: string,
+>name : string
+>     : ^^^^^^
+
+    isDog: T,
+>isDog : T
+>      : ^
+}
+
+type Ret<T> =
+>Ret : Ret<T>
+>    : ^^^^^^
+
+    T extends true ? "woof" :
+>true : true
+>     : ^^^^
+
+    T extends false? "meow" :
+>false : false
+>      : ^^^^^
+
+    never;
+
+function example1<T extends boolean>(param1: T, param2: Foo<T>): Ret<T> {
+>example1 : <T extends boolean>(param1: T, param2: Foo<T>) => Ret<T>
+>         : ^ ^^^^^^^^^       ^^      ^^ ^^      ^^      ^^^^^      
+>param1 : T
+>       : ^
+>param2 : Foo<T>
+>       : ^^^^^^
+
+    if (param1) {
+>param1 : T
+>       : ^
+
+        return "woof";
+>"woof" : "woof"
+>       : ^^^^^^
+    }
+    return "meow"
+>"meow" : "meow"
+>       : ^^^^^^
+}
+
diff --git a/tests/cases/compiler/dependentReturnType11.ts b/tests/cases/compiler/dependentReturnType11.ts
new file mode 100644
index 0000000000000..a55d6d92dc4ed
--- /dev/null
+++ b/tests/cases/compiler/dependentReturnType11.ts
@@ -0,0 +1,18 @@
+// @noEmit: true
+
+type Foo<T extends boolean> = {
+    name: string,
+    isDog: T,
+}
+
+type Ret<T> =
+    T extends true ? "woof" :
+    T extends false? "meow" :
+    never;
+
+function example1<T extends boolean>(param1: T, param2: Foo<T>): Ret<T> {
+    if (param1) {
+        return "woof";
+    }
+    return "meow"
+}