Skip to content

Commit e012404

Browse files
authored
Revert PR #52589 (#53280)
1 parent 7f292bf commit e012404

13 files changed

+122
-78
lines changed

src/compiler/checker.ts

+13-8
Original file line numberDiff line numberDiff line change
@@ -19592,8 +19592,18 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
1959219592
return result;
1959319593
}
1959419594
const moreThanOneRealChildren = length(validChildren) > 1;
19595-
const arrayLikeTargetParts = filterType(childrenTargetType, isAssignableToAvailableAnyIterable);
19596-
const nonArrayLikeTargetParts = filterType(childrenTargetType, t => !isAssignableToAvailableAnyIterable(t));
19595+
let arrayLikeTargetParts: Type;
19596+
let nonArrayLikeTargetParts: Type;
19597+
const iterableType = getGlobalIterableType(/*reportErrors*/ false);
19598+
if (iterableType !== emptyGenericType) {
19599+
const anyIterable = createIterableType(anyType);
19600+
arrayLikeTargetParts = filterType(childrenTargetType, t => isTypeAssignableTo(t, anyIterable));
19601+
nonArrayLikeTargetParts = filterType(childrenTargetType, t => !isTypeAssignableTo(t, anyIterable));
19602+
}
19603+
else {
19604+
arrayLikeTargetParts = filterType(childrenTargetType, isArrayOrTupleLikeType);
19605+
nonArrayLikeTargetParts = filterType(childrenTargetType, t => !isArrayOrTupleLikeType(t));
19606+
}
1959719607
if (moreThanOneRealChildren) {
1959819608
if (arrayLikeTargetParts !== neverType) {
1959919609
const realSource = createTupleType(checkJsxChildren(containingElement, CheckMode.Normal));
@@ -23116,11 +23126,6 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
2311623126
return isArrayLikeType(type) || isTupleLikeType(type);
2311723127
}
2311823128

23119-
function isAssignableToAvailableAnyIterable(type: Type): boolean {
23120-
const anyIterable = getGlobalIterableType(/*reportErrors*/ false) !== emptyGenericType && createIterableType(anyType);
23121-
return anyIterable ? isTypeAssignableTo(type, anyIterable) : isArrayOrTupleLikeType(type);
23122-
}
23123-
2312423129
function getTupleElementType(type: Type, index: number) {
2312523130
const propType = getTypeOfPropertyOfType(type, "" + index as __String);
2312623131
if (propType) {
@@ -29080,7 +29085,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
2908029085
// type of T.
2908129086
function getContextualTypeForElementExpression(arrayContextualType: Type | undefined, index: number): Type | undefined {
2908229087
return arrayContextualType && (
29083-
index >= 0 && getTypeOfPropertyOfContextualType(filterType(arrayContextualType, t => !!getIndexTypeOfType(t, numberType) || isAssignableToAvailableAnyIterable(t)), "" + index as __String) ||
29088+
index >= 0 && getTypeOfPropertyOfContextualType(arrayContextualType, "" + index as __String) ||
2908429089
mapType(arrayContextualType, t =>
2908529090
isTupleType(t) ?
2908629091
getElementTypeOfSliceOfTupleType(t, 0, /*endSkipCount*/ 0, /*writing*/ false, /*noReductions*/ true) :
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
tests/cases/compiler/contextualSignatureInArrayElementLibEs2015.ts(8,4): error TS7006: Parameter 'arg' implicitly has an 'any' type.
2+
3+
4+
==== tests/cases/compiler/contextualSignatureInArrayElementLibEs2015.ts (1 errors) ====
5+
// See: https://github.com/microsoft/TypeScript/pull/53280#discussion_r1138684984
6+
7+
declare function test(
8+
arg: Record<string, (arg: string) => void> | Array<(arg: number) => void>
9+
): void;
10+
11+
test([
12+
(arg) => {
13+
~~~
14+
!!! error TS7006: Parameter 'arg' implicitly has an 'any' type.
15+
arg; // number
16+
},
17+
]);
18+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
=== tests/cases/compiler/contextualSignatureInArrayElementLibEs2015.ts ===
2+
// See: https://github.com/microsoft/TypeScript/pull/53280#discussion_r1138684984
3+
4+
declare function test(
5+
>test : Symbol(test, Decl(contextualSignatureInArrayElementLibEs2015.ts, 0, 0))
6+
7+
arg: Record<string, (arg: string) => void> | Array<(arg: number) => void>
8+
>arg : Symbol(arg, Decl(contextualSignatureInArrayElementLibEs2015.ts, 2, 22))
9+
>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --))
10+
>arg : Symbol(arg, Decl(contextualSignatureInArrayElementLibEs2015.ts, 3, 23))
11+
>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es2015.core.d.ts, --, --), Decl(lib.es2015.iterable.d.ts, --, --), Decl(lib.es2015.symbol.wellknown.d.ts, --, --))
12+
>arg : Symbol(arg, Decl(contextualSignatureInArrayElementLibEs2015.ts, 3, 54))
13+
14+
): void;
15+
16+
test([
17+
>test : Symbol(test, Decl(contextualSignatureInArrayElementLibEs2015.ts, 0, 0))
18+
19+
(arg) => {
20+
>arg : Symbol(arg, Decl(contextualSignatureInArrayElementLibEs2015.ts, 7, 3))
21+
22+
arg; // number
23+
>arg : Symbol(arg, Decl(contextualSignatureInArrayElementLibEs2015.ts, 7, 3))
24+
25+
},
26+
]);
27+
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
=== tests/cases/compiler/contextualSignatureInArrayElementPrefersArrayUnionMemberLibEs5.ts ===
2-
// repro from #52588
1+
=== tests/cases/compiler/contextualSignatureInArrayElementLibEs2015.ts ===
2+
// See: https://github.com/microsoft/TypeScript/pull/53280#discussion_r1138684984
33

44
declare function test(
55
>test : (arg: Record<string, (arg: string) => void> | ((arg: number) => void)[]) => void
@@ -14,14 +14,14 @@ declare function test(
1414
test([
1515
>test([ (arg) => { arg; // number },]) : void
1616
>test : (arg: Record<string, (arg: string) => void> | ((arg: number) => void)[]) => void
17-
>[ (arg) => { arg; // number },] : ((arg: number) => void)[]
17+
>[ (arg) => { arg; // number },] : ((arg: any) => void)[]
1818

1919
(arg) => {
20-
>(arg) => { arg; // number } : (arg: number) => void
21-
>arg : number
20+
>(arg) => { arg; // number } : (arg: any) => void
21+
>arg : any
2222

2323
arg; // number
24-
>arg : number
24+
>arg : any
2525

2626
},
2727
]);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
tests/cases/compiler/contextualSignatureInArrayElementLibEs5.ts(8,4): error TS7006: Parameter 'arg' implicitly has an 'any' type.
2+
3+
4+
==== tests/cases/compiler/contextualSignatureInArrayElementLibEs5.ts (1 errors) ====
5+
// See: https://github.com/microsoft/TypeScript/pull/53280#discussion_r1138684984
6+
7+
declare function test(
8+
arg: Record<string, (arg: string) => void> | Array<(arg: number) => void>
9+
): void;
10+
11+
test([
12+
(arg) => {
13+
~~~
14+
!!! error TS7006: Parameter 'arg' implicitly has an 'any' type.
15+
arg; // number
16+
},
17+
]);
18+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
=== tests/cases/compiler/contextualSignatureInArrayElementLibEs5.ts ===
2+
// See: https://github.com/microsoft/TypeScript/pull/53280#discussion_r1138684984
3+
4+
declare function test(
5+
>test : Symbol(test, Decl(contextualSignatureInArrayElementLibEs5.ts, 0, 0))
6+
7+
arg: Record<string, (arg: string) => void> | Array<(arg: number) => void>
8+
>arg : Symbol(arg, Decl(contextualSignatureInArrayElementLibEs5.ts, 2, 22))
9+
>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --))
10+
>arg : Symbol(arg, Decl(contextualSignatureInArrayElementLibEs5.ts, 3, 23))
11+
>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
12+
>arg : Symbol(arg, Decl(contextualSignatureInArrayElementLibEs5.ts, 3, 54))
13+
14+
): void;
15+
16+
test([
17+
>test : Symbol(test, Decl(contextualSignatureInArrayElementLibEs5.ts, 0, 0))
18+
19+
(arg) => {
20+
>arg : Symbol(arg, Decl(contextualSignatureInArrayElementLibEs5.ts, 7, 3))
21+
22+
arg; // number
23+
>arg : Symbol(arg, Decl(contextualSignatureInArrayElementLibEs5.ts, 7, 3))
24+
25+
},
26+
]);
27+
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
=== tests/cases/compiler/contextualSignatureInArrayElementPrefersArrayUnionMemberLibEs2015.ts ===
2-
// repro from #52588
1+
=== tests/cases/compiler/contextualSignatureInArrayElementLibEs5.ts ===
2+
// See: https://github.com/microsoft/TypeScript/pull/53280#discussion_r1138684984
33

44
declare function test(
55
>test : (arg: Record<string, (arg: string) => void> | ((arg: number) => void)[]) => void
@@ -14,14 +14,14 @@ declare function test(
1414
test([
1515
>test([ (arg) => { arg; // number },]) : void
1616
>test : (arg: Record<string, (arg: string) => void> | ((arg: number) => void)[]) => void
17-
>[ (arg) => { arg; // number },] : ((arg: number) => void)[]
17+
>[ (arg) => { arg; // number },] : ((arg: any) => void)[]
1818

1919
(arg) => {
20-
>(arg) => { arg; // number } : (arg: number) => void
21-
>arg : number
20+
>(arg) => { arg; // number } : (arg: any) => void
21+
>arg : any
2222

2323
arg; // number
24-
>arg : number
24+
>arg : any
2525

2626
},
2727
]);

tests/baselines/reference/contextualSignatureInArrayElementPrefersArrayUnionMemberLibEs2015.symbols

-27
This file was deleted.

tests/baselines/reference/contextualSignatureInArrayElementPrefersArrayUnionMemberLibEs5.symbols

-27
This file was deleted.

tests/baselines/reference/inferringAnyFunctionType1.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ function f<T extends { "0": (p1: number) => number }>(p: T): T {
33
return p;
44
}
55

6-
var v = f([x => x]);
6+
var v = f([x => x]);
7+
78

89
//// [inferringAnyFunctionType1.js]
910
function f(p) {
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// @noEmit: true
33
// @lib: es2015
44

5-
// repro from #52588
5+
// See: https://github.com/microsoft/TypeScript/pull/53280#discussion_r1138684984
66

77
declare function test(
88
arg: Record<string, (arg: string) => void> | Array<(arg: number) => void>
+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// @noEmit: true
33
// @lib: es5
44

5-
// repro from #52588
5+
// See: https://github.com/microsoft/TypeScript/pull/53280#discussion_r1138684984
66

77
declare function test(
88
arg: Record<string, (arg: string) => void> | Array<(arg: number) => void>
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
// @lib: es2015
2+
13
function f<T extends { "0": (p1: number) => number }>(p: T): T {
24
return p;
35
}
46

5-
var v = f([x => x]);
7+
var v = f([x => x]);

0 commit comments

Comments
 (0)