Skip to content

Commit 5d9d842

Browse files
committed
Do not get return type from contextual signature if we are already in process of getting return type of it
Fixes #10073
1 parent dc37473 commit 5d9d842

File tree

4 files changed

+29
-9
lines changed

4 files changed

+29
-9
lines changed

src/compiler/checker.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12771,7 +12771,10 @@ namespace ts {
1277112771
if (!contextualSignature) {
1277212772
reportErrorsFromWidening(func, type);
1277312773
}
12774-
if (isUnitType(type) && !(contextualSignature && isLiteralContextualType(getReturnTypeOfSignature(contextualSignature)))) {
12774+
if (isUnitType(type) &&
12775+
!(contextualSignature &&
12776+
isLiteralContextualType(
12777+
contextualSignature === getSignatureFromDeclaration(func) ? type : getReturnTypeOfSignature(contextualSignature)))) {
1277512778
type = getWidenedLiteralType(type);
1277612779
}
1277712780

tests/baselines/reference/selfReference.errors.txt

Lines changed: 0 additions & 8 deletions
This file was deleted.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
=== tests/cases/compiler/selfReference.ts ===
2+
declare function asFunction<T>(value: T): () => T;
3+
>asFunction : Symbol(asFunction, Decl(selfReference.ts, 0, 0))
4+
>T : Symbol(T, Decl(selfReference.ts, 0, 28))
5+
>value : Symbol(value, Decl(selfReference.ts, 0, 31))
6+
>T : Symbol(T, Decl(selfReference.ts, 0, 28))
7+
>T : Symbol(T, Decl(selfReference.ts, 0, 28))
8+
9+
asFunction(() => { return 1; });
10+
>asFunction : Symbol(asFunction, Decl(selfReference.ts, 0, 0))
11+
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
=== tests/cases/compiler/selfReference.ts ===
2+
declare function asFunction<T>(value: T): () => T;
3+
>asFunction : <T>(value: T) => () => T
4+
>T : T
5+
>value : T
6+
>T : T
7+
>T : T
8+
9+
asFunction(() => { return 1; });
10+
>asFunction(() => { return 1; }) : () => () => 1
11+
>asFunction : <T>(value: T) => () => T
12+
>() => { return 1; } : () => 1
13+
>1 : 1
14+

0 commit comments

Comments
 (0)