mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-04-17 01:49:41 -05:00
@@ -19592,8 +19592,18 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
return result;
|
||||
}
|
||||
const moreThanOneRealChildren = length(validChildren) > 1;
|
||||
const arrayLikeTargetParts = filterType(childrenTargetType, isAssignableToAvailableAnyIterable);
|
||||
const nonArrayLikeTargetParts = filterType(childrenTargetType, t => !isAssignableToAvailableAnyIterable(t));
|
||||
let arrayLikeTargetParts: Type;
|
||||
let nonArrayLikeTargetParts: Type;
|
||||
const iterableType = getGlobalIterableType(/*reportErrors*/ false);
|
||||
if (iterableType !== emptyGenericType) {
|
||||
const anyIterable = createIterableType(anyType);
|
||||
arrayLikeTargetParts = filterType(childrenTargetType, t => isTypeAssignableTo(t, anyIterable));
|
||||
nonArrayLikeTargetParts = filterType(childrenTargetType, t => !isTypeAssignableTo(t, anyIterable));
|
||||
}
|
||||
else {
|
||||
arrayLikeTargetParts = filterType(childrenTargetType, isArrayOrTupleLikeType);
|
||||
nonArrayLikeTargetParts = filterType(childrenTargetType, t => !isArrayOrTupleLikeType(t));
|
||||
}
|
||||
if (moreThanOneRealChildren) {
|
||||
if (arrayLikeTargetParts !== neverType) {
|
||||
const realSource = createTupleType(checkJsxChildren(containingElement, CheckMode.Normal));
|
||||
@@ -23116,11 +23126,6 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
return isArrayLikeType(type) || isTupleLikeType(type);
|
||||
}
|
||||
|
||||
function isAssignableToAvailableAnyIterable(type: Type): boolean {
|
||||
const anyIterable = getGlobalIterableType(/*reportErrors*/ false) !== emptyGenericType && createIterableType(anyType);
|
||||
return anyIterable ? isTypeAssignableTo(type, anyIterable) : isArrayOrTupleLikeType(type);
|
||||
}
|
||||
|
||||
function getTupleElementType(type: Type, index: number) {
|
||||
const propType = getTypeOfPropertyOfType(type, "" + index as __String);
|
||||
if (propType) {
|
||||
@@ -29080,7 +29085,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
// type of T.
|
||||
function getContextualTypeForElementExpression(arrayContextualType: Type | undefined, index: number): Type | undefined {
|
||||
return arrayContextualType && (
|
||||
index >= 0 && getTypeOfPropertyOfContextualType(filterType(arrayContextualType, t => !!getIndexTypeOfType(t, numberType) || isAssignableToAvailableAnyIterable(t)), "" + index as __String) ||
|
||||
index >= 0 && getTypeOfPropertyOfContextualType(arrayContextualType, "" + index as __String) ||
|
||||
mapType(arrayContextualType, t =>
|
||||
isTupleType(t) ?
|
||||
getElementTypeOfSliceOfTupleType(t, 0, /*endSkipCount*/ 0, /*writing*/ false, /*noReductions*/ true) :
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
tests/cases/compiler/contextualSignatureInArrayElementLibEs2015.ts(8,4): error TS7006: Parameter 'arg' implicitly has an 'any' type.
|
||||
|
||||
|
||||
==== tests/cases/compiler/contextualSignatureInArrayElementLibEs2015.ts (1 errors) ====
|
||||
// See: https://github.com/microsoft/TypeScript/pull/53280#discussion_r1138684984
|
||||
|
||||
declare function test(
|
||||
arg: Record<string, (arg: string) => void> | Array<(arg: number) => void>
|
||||
): void;
|
||||
|
||||
test([
|
||||
(arg) => {
|
||||
~~~
|
||||
!!! error TS7006: Parameter 'arg' implicitly has an 'any' type.
|
||||
arg; // number
|
||||
},
|
||||
]);
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
=== tests/cases/compiler/contextualSignatureInArrayElementLibEs2015.ts ===
|
||||
// See: https://github.com/microsoft/TypeScript/pull/53280#discussion_r1138684984
|
||||
|
||||
declare function test(
|
||||
>test : Symbol(test, Decl(contextualSignatureInArrayElementLibEs2015.ts, 0, 0))
|
||||
|
||||
arg: Record<string, (arg: string) => void> | Array<(arg: number) => void>
|
||||
>arg : Symbol(arg, Decl(contextualSignatureInArrayElementLibEs2015.ts, 2, 22))
|
||||
>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --))
|
||||
>arg : Symbol(arg, Decl(contextualSignatureInArrayElementLibEs2015.ts, 3, 23))
|
||||
>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, --, --))
|
||||
>arg : Symbol(arg, Decl(contextualSignatureInArrayElementLibEs2015.ts, 3, 54))
|
||||
|
||||
): void;
|
||||
|
||||
test([
|
||||
>test : Symbol(test, Decl(contextualSignatureInArrayElementLibEs2015.ts, 0, 0))
|
||||
|
||||
(arg) => {
|
||||
>arg : Symbol(arg, Decl(contextualSignatureInArrayElementLibEs2015.ts, 7, 3))
|
||||
|
||||
arg; // number
|
||||
>arg : Symbol(arg, Decl(contextualSignatureInArrayElementLibEs2015.ts, 7, 3))
|
||||
|
||||
},
|
||||
]);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
=== tests/cases/compiler/contextualSignatureInArrayElementPrefersArrayUnionMemberLibEs5.ts ===
|
||||
// repro from #52588
|
||||
=== tests/cases/compiler/contextualSignatureInArrayElementLibEs2015.ts ===
|
||||
// See: https://github.com/microsoft/TypeScript/pull/53280#discussion_r1138684984
|
||||
|
||||
declare function test(
|
||||
>test : (arg: Record<string, (arg: string) => void> | ((arg: number) => void)[]) => void
|
||||
@@ -14,14 +14,14 @@ declare function test(
|
||||
test([
|
||||
>test([ (arg) => { arg; // number },]) : void
|
||||
>test : (arg: Record<string, (arg: string) => void> | ((arg: number) => void)[]) => void
|
||||
>[ (arg) => { arg; // number },] : ((arg: number) => void)[]
|
||||
>[ (arg) => { arg; // number },] : ((arg: any) => void)[]
|
||||
|
||||
(arg) => {
|
||||
>(arg) => { arg; // number } : (arg: number) => void
|
||||
>arg : number
|
||||
>(arg) => { arg; // number } : (arg: any) => void
|
||||
>arg : any
|
||||
|
||||
arg; // number
|
||||
>arg : number
|
||||
>arg : any
|
||||
|
||||
},
|
||||
]);
|
||||
@@ -0,0 +1,18 @@
|
||||
tests/cases/compiler/contextualSignatureInArrayElementLibEs5.ts(8,4): error TS7006: Parameter 'arg' implicitly has an 'any' type.
|
||||
|
||||
|
||||
==== tests/cases/compiler/contextualSignatureInArrayElementLibEs5.ts (1 errors) ====
|
||||
// See: https://github.com/microsoft/TypeScript/pull/53280#discussion_r1138684984
|
||||
|
||||
declare function test(
|
||||
arg: Record<string, (arg: string) => void> | Array<(arg: number) => void>
|
||||
): void;
|
||||
|
||||
test([
|
||||
(arg) => {
|
||||
~~~
|
||||
!!! error TS7006: Parameter 'arg' implicitly has an 'any' type.
|
||||
arg; // number
|
||||
},
|
||||
]);
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
=== tests/cases/compiler/contextualSignatureInArrayElementLibEs5.ts ===
|
||||
// See: https://github.com/microsoft/TypeScript/pull/53280#discussion_r1138684984
|
||||
|
||||
declare function test(
|
||||
>test : Symbol(test, Decl(contextualSignatureInArrayElementLibEs5.ts, 0, 0))
|
||||
|
||||
arg: Record<string, (arg: string) => void> | Array<(arg: number) => void>
|
||||
>arg : Symbol(arg, Decl(contextualSignatureInArrayElementLibEs5.ts, 2, 22))
|
||||
>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --))
|
||||
>arg : Symbol(arg, Decl(contextualSignatureInArrayElementLibEs5.ts, 3, 23))
|
||||
>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
|
||||
>arg : Symbol(arg, Decl(contextualSignatureInArrayElementLibEs5.ts, 3, 54))
|
||||
|
||||
): void;
|
||||
|
||||
test([
|
||||
>test : Symbol(test, Decl(contextualSignatureInArrayElementLibEs5.ts, 0, 0))
|
||||
|
||||
(arg) => {
|
||||
>arg : Symbol(arg, Decl(contextualSignatureInArrayElementLibEs5.ts, 7, 3))
|
||||
|
||||
arg; // number
|
||||
>arg : Symbol(arg, Decl(contextualSignatureInArrayElementLibEs5.ts, 7, 3))
|
||||
|
||||
},
|
||||
]);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
=== tests/cases/compiler/contextualSignatureInArrayElementPrefersArrayUnionMemberLibEs2015.ts ===
|
||||
// repro from #52588
|
||||
=== tests/cases/compiler/contextualSignatureInArrayElementLibEs5.ts ===
|
||||
// See: https://github.com/microsoft/TypeScript/pull/53280#discussion_r1138684984
|
||||
|
||||
declare function test(
|
||||
>test : (arg: Record<string, (arg: string) => void> | ((arg: number) => void)[]) => void
|
||||
@@ -14,14 +14,14 @@ declare function test(
|
||||
test([
|
||||
>test([ (arg) => { arg; // number },]) : void
|
||||
>test : (arg: Record<string, (arg: string) => void> | ((arg: number) => void)[]) => void
|
||||
>[ (arg) => { arg; // number },] : ((arg: number) => void)[]
|
||||
>[ (arg) => { arg; // number },] : ((arg: any) => void)[]
|
||||
|
||||
(arg) => {
|
||||
>(arg) => { arg; // number } : (arg: number) => void
|
||||
>arg : number
|
||||
>(arg) => { arg; // number } : (arg: any) => void
|
||||
>arg : any
|
||||
|
||||
arg; // number
|
||||
>arg : number
|
||||
>arg : any
|
||||
|
||||
},
|
||||
]);
|
||||
@@ -1,27 +0,0 @@
|
||||
=== tests/cases/compiler/contextualSignatureInArrayElementPrefersArrayUnionMemberLibEs2015.ts ===
|
||||
// repro from #52588
|
||||
|
||||
declare function test(
|
||||
>test : Symbol(test, Decl(contextualSignatureInArrayElementPrefersArrayUnionMemberLibEs2015.ts, 0, 0))
|
||||
|
||||
arg: Record<string, (arg: string) => void> | Array<(arg: number) => void>
|
||||
>arg : Symbol(arg, Decl(contextualSignatureInArrayElementPrefersArrayUnionMemberLibEs2015.ts, 2, 22))
|
||||
>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --))
|
||||
>arg : Symbol(arg, Decl(contextualSignatureInArrayElementPrefersArrayUnionMemberLibEs2015.ts, 3, 23))
|
||||
>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, --, --))
|
||||
>arg : Symbol(arg, Decl(contextualSignatureInArrayElementPrefersArrayUnionMemberLibEs2015.ts, 3, 54))
|
||||
|
||||
): void;
|
||||
|
||||
test([
|
||||
>test : Symbol(test, Decl(contextualSignatureInArrayElementPrefersArrayUnionMemberLibEs2015.ts, 0, 0))
|
||||
|
||||
(arg) => {
|
||||
>arg : Symbol(arg, Decl(contextualSignatureInArrayElementPrefersArrayUnionMemberLibEs2015.ts, 7, 3))
|
||||
|
||||
arg; // number
|
||||
>arg : Symbol(arg, Decl(contextualSignatureInArrayElementPrefersArrayUnionMemberLibEs2015.ts, 7, 3))
|
||||
|
||||
},
|
||||
]);
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
=== tests/cases/compiler/contextualSignatureInArrayElementPrefersArrayUnionMemberLibEs5.ts ===
|
||||
// repro from #52588
|
||||
|
||||
declare function test(
|
||||
>test : Symbol(test, Decl(contextualSignatureInArrayElementPrefersArrayUnionMemberLibEs5.ts, 0, 0))
|
||||
|
||||
arg: Record<string, (arg: string) => void> | Array<(arg: number) => void>
|
||||
>arg : Symbol(arg, Decl(contextualSignatureInArrayElementPrefersArrayUnionMemberLibEs5.ts, 2, 22))
|
||||
>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --))
|
||||
>arg : Symbol(arg, Decl(contextualSignatureInArrayElementPrefersArrayUnionMemberLibEs5.ts, 3, 23))
|
||||
>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
|
||||
>arg : Symbol(arg, Decl(contextualSignatureInArrayElementPrefersArrayUnionMemberLibEs5.ts, 3, 54))
|
||||
|
||||
): void;
|
||||
|
||||
test([
|
||||
>test : Symbol(test, Decl(contextualSignatureInArrayElementPrefersArrayUnionMemberLibEs5.ts, 0, 0))
|
||||
|
||||
(arg) => {
|
||||
>arg : Symbol(arg, Decl(contextualSignatureInArrayElementPrefersArrayUnionMemberLibEs5.ts, 7, 3))
|
||||
|
||||
arg; // number
|
||||
>arg : Symbol(arg, Decl(contextualSignatureInArrayElementPrefersArrayUnionMemberLibEs5.ts, 7, 3))
|
||||
|
||||
},
|
||||
]);
|
||||
|
||||
@@ -3,7 +3,8 @@ function f<T extends { "0": (p1: number) => number }>(p: T): T {
|
||||
return p;
|
||||
}
|
||||
|
||||
var v = f([x => x]);
|
||||
var v = f([x => x]);
|
||||
|
||||
|
||||
//// [inferringAnyFunctionType1.js]
|
||||
function f(p) {
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
// @noEmit: true
|
||||
// @lib: es2015
|
||||
|
||||
// repro from #52588
|
||||
// See: https://github.com/microsoft/TypeScript/pull/53280#discussion_r1138684984
|
||||
|
||||
declare function test(
|
||||
arg: Record<string, (arg: string) => void> | Array<(arg: number) => void>
|
||||
@@ -2,7 +2,7 @@
|
||||
// @noEmit: true
|
||||
// @lib: es5
|
||||
|
||||
// repro from #52588
|
||||
// See: https://github.com/microsoft/TypeScript/pull/53280#discussion_r1138684984
|
||||
|
||||
declare function test(
|
||||
arg: Record<string, (arg: string) => void> | Array<(arg: number) => void>
|
||||
@@ -1,5 +1,7 @@
|
||||
// @lib: es2015
|
||||
|
||||
function f<T extends { "0": (p1: number) => number }>(p: T): T {
|
||||
return p;
|
||||
}
|
||||
|
||||
var v = f([x => x]);
|
||||
var v = f([x => x]);
|
||||
|
||||
Reference in New Issue
Block a user