Skip to content

Commit c69f447

Browse files
authored
Handle composite signatures in isResolvingReturnTypeOfSignature (#55165)
1 parent cbf3c63 commit c69f447

File tree

4 files changed

+99
-2
lines changed

4 files changed

+99
-2
lines changed

src/compiler/checker.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14888,8 +14888,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
1488814888
return getReturnTypeOfTypeTag(declaration);
1488914889
}
1489014890

14891-
function isResolvingReturnTypeOfSignature(signature: Signature) {
14892-
return !signature.resolvedReturnType && findResolutionCycleStartIndex(signature, TypeSystemPropertyName.ResolvedReturnType) >= 0;
14891+
function isResolvingReturnTypeOfSignature(signature: Signature): boolean {
14892+
return signature.compositeSignatures && some(signature.compositeSignatures, isResolvingReturnTypeOfSignature) ||
14893+
!signature.resolvedReturnType && findResolutionCycleStartIndex(signature, TypeSystemPropertyName.ResolvedReturnType) >= 0;
1489314894
}
1489414895

1489514896
function getRestTypeOfSignature(signature: Signature): Type {
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
//// [tests/cases/compiler/compositeContextualSignature.ts] ////
2+
3+
=== compositeContextualSignature.ts ===
4+
// Repro from #55145
5+
6+
function f<T extends any[]>(v: ReadonlyArray<T>) { }
7+
>f : Symbol(f, Decl(compositeContextualSignature.ts, 0, 0))
8+
>T : Symbol(T, Decl(compositeContextualSignature.ts, 2, 11))
9+
>v : Symbol(v, Decl(compositeContextualSignature.ts, 2, 28))
10+
>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --))
11+
>T : Symbol(T, Decl(compositeContextualSignature.ts, 2, 11))
12+
13+
f([
14+
>f : Symbol(f, Decl(compositeContextualSignature.ts, 0, 0))
15+
16+
[
17+
undefined,
18+
>undefined : Symbol(undefined)
19+
20+
() => { },
21+
],
22+
[
23+
1,
24+
() => {
25+
console.log('Hello')
26+
>console.log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
27+
>console : Symbol(console, Decl(lib.dom.d.ts, --, --))
28+
>log : Symbol(Console.log, Decl(lib.dom.d.ts, --, --))
29+
30+
},
31+
],
32+
]);
33+
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
//// [tests/cases/compiler/compositeContextualSignature.ts] ////
2+
3+
=== compositeContextualSignature.ts ===
4+
// Repro from #55145
5+
6+
function f<T extends any[]>(v: ReadonlyArray<T>) { }
7+
>f : <T extends any[]>(v: ReadonlyArray<T>) => void
8+
>v : readonly T[]
9+
10+
f([
11+
>f([ [ undefined, () => { }, ], [ 1, () => { console.log('Hello') }, ],]) : void
12+
>f : <T extends any[]>(v: readonly T[]) => void
13+
>[ [ undefined, () => { }, ], [ 1, () => { console.log('Hello') }, ],] : (((() => void) | undefined)[] | (number | (() => void))[])[]
14+
15+
[
16+
>[ undefined, () => { }, ] : ((() => void) | undefined)[]
17+
18+
undefined,
19+
>undefined : undefined
20+
21+
() => { },
22+
>() => { } : () => void
23+
24+
],
25+
[
26+
>[ 1, () => { console.log('Hello') }, ] : (number | (() => void))[]
27+
28+
1,
29+
>1 : 1
30+
31+
() => {
32+
>() => { console.log('Hello') } : () => void
33+
34+
console.log('Hello')
35+
>console.log('Hello') : void
36+
>console.log : (...data: any[]) => void
37+
>console : Console
38+
>log : (...data: any[]) => void
39+
>'Hello' : "Hello"
40+
41+
},
42+
],
43+
]);
44+
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// @strict: true
2+
// @noEmit: true
3+
4+
// Repro from #55145
5+
6+
function f<T extends any[]>(v: ReadonlyArray<T>) { }
7+
8+
f([
9+
[
10+
undefined,
11+
() => { },
12+
],
13+
[
14+
1,
15+
() => {
16+
console.log('Hello')
17+
},
18+
],
19+
]);

0 commit comments

Comments
 (0)