Skip to content

Commit 3212e25

Browse files
authored
Merge pull request microsoft#11427 from Microsoft/implictAnySelfRef
Do not get return type from contextual signature if we are already in process of getting return type of it
2 parents 02493de + 5d9d842 commit 3212e25

File tree

5 files changed

+38
-1
lines changed

5 files changed

+38
-1
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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
//// [selfReference.ts]
2+
declare function asFunction<T>(value: T): () => T;
3+
asFunction(() => { return 1; });
4+
5+
//// [selfReference.js]
6+
asFunction(function () { return 1; });
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+

tests/cases/compiler/selfReference.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
// @noImplicitAny: true
2+
declare function asFunction<T>(value: T): () => T;
3+
asFunction(() => { return 1; });

0 commit comments

Comments
 (0)