Skip to content

Commit be0fcd5

Browse files
authored
Array.concat now takes ConcatArray, not ReadonlyArray (#21462)
* Overloads in Array.concat now handle ReadonlyArray Previously it was union types, which is slower. * Make arrayConcat3 test stricter * Switch to InputArray instead of adding overloads * Update baselines * Update baselines correctly * Rename to ConcatArray and add slice method Should make it, respectively, easier to understand this specific type and harder to satisfy it by mistake.
1 parent 2c3b693 commit be0fcd5

19 files changed

+63
-71
lines changed

src/lib/es5.d.ts

+11-4
Original file line numberDiff line numberDiff line change
@@ -992,12 +992,12 @@ interface ReadonlyArray<T> {
992992
* Combines two or more arrays.
993993
* @param items Additional items to add to the end of array1.
994994
*/
995-
concat(...items: (T[] | ReadonlyArray<T>)[]): T[];
995+
concat(...items: ConcatArray<T>[]): T[];
996996
/**
997997
* Combines two or more arrays.
998998
* @param items Additional items to add to the end of array1.
999999
*/
1000-
concat(...items: (T | T[] | ReadonlyArray<T>)[]): T[];
1000+
concat(...items: (T | ConcatArray<T>)[]): T[];
10011001
/**
10021002
* Adds all the elements of an array separated by the specified separator string.
10031003
* @param separator A string used to separate one element of an array from the next in the resulting String. If omitted, the array elements are separated with a comma.
@@ -1087,6 +1087,13 @@ interface ReadonlyArray<T> {
10871087
readonly [n: number]: T;
10881088
}
10891089

1090+
interface ConcatArray<T> {
1091+
readonly length: number;
1092+
readonly [n: number]: T;
1093+
join(separator?: string): string;
1094+
slice(start?: number, end?: number): T[];
1095+
}
1096+
10901097
interface Array<T> {
10911098
/**
10921099
* Gets or sets the length of the array. This is a number one higher than the highest element defined in an array.
@@ -1113,12 +1120,12 @@ interface Array<T> {
11131120
* Combines two or more arrays.
11141121
* @param items Additional items to add to the end of array1.
11151122
*/
1116-
concat(...items: (T[] | ReadonlyArray<T>)[]): T[];
1123+
concat(...items: ConcatArray<T>[]): T[];
11171124
/**
11181125
* Combines two or more arrays.
11191126
* @param items Additional items to add to the end of array1.
11201127
*/
1121-
concat(...items: (T | T[] | ReadonlyArray<T>)[]): T[];
1128+
concat(...items: (T | ConcatArray<T>)[]): T[];
11221129
/**
11231130
* Adds all the elements of an array separated by the specified separator string.
11241131
* @param separator A string used to separate one element of an array from the next in the resulting String. If omitted, the array elements are separated with a comma.

tests/baselines/reference/arrayConcat2.types

+6-6
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,17 @@ var a: string[] = [];
55

66
a.concat("hello", 'world');
77
>a.concat("hello", 'world') : string[]
8-
>a.concat : { (...items: (string[] | ReadonlyArray<string>)[]): string[]; (...items: (string | string[] | ReadonlyArray<string>)[]): string[]; }
8+
>a.concat : { (...items: ConcatArray<string>[]): string[]; (...items: (string | ConcatArray<string>)[]): string[]; }
99
>a : string[]
10-
>concat : { (...items: (string[] | ReadonlyArray<string>)[]): string[]; (...items: (string | string[] | ReadonlyArray<string>)[]): string[]; }
10+
>concat : { (...items: ConcatArray<string>[]): string[]; (...items: (string | ConcatArray<string>)[]): string[]; }
1111
>"hello" : "hello"
1212
>'world' : "world"
1313

1414
a.concat('Hello');
1515
>a.concat('Hello') : string[]
16-
>a.concat : { (...items: (string[] | ReadonlyArray<string>)[]): string[]; (...items: (string | string[] | ReadonlyArray<string>)[]): string[]; }
16+
>a.concat : { (...items: ConcatArray<string>[]): string[]; (...items: (string | ConcatArray<string>)[]): string[]; }
1717
>a : string[]
18-
>concat : { (...items: (string[] | ReadonlyArray<string>)[]): string[]; (...items: (string | string[] | ReadonlyArray<string>)[]): string[]; }
18+
>concat : { (...items: ConcatArray<string>[]): string[]; (...items: (string | ConcatArray<string>)[]): string[]; }
1919
>'Hello' : "Hello"
2020

2121
var b = new Array<string>();
@@ -25,8 +25,8 @@ var b = new Array<string>();
2525

2626
b.concat('hello');
2727
>b.concat('hello') : string[]
28-
>b.concat : { (...items: (string[] | ReadonlyArray<string>)[]): string[]; (...items: (string | string[] | ReadonlyArray<string>)[]): string[]; }
28+
>b.concat : { (...items: ConcatArray<string>[]): string[]; (...items: (string | ConcatArray<string>)[]): string[]; }
2929
>b : string[]
30-
>concat : { (...items: (string[] | ReadonlyArray<string>)[]): string[]; (...items: (string | string[] | ReadonlyArray<string>)[]): string[]; }
30+
>concat : { (...items: ConcatArray<string>[]): string[]; (...items: (string | ConcatArray<string>)[]): string[]; }
3131
>'hello' : "hello"
3232

tests/baselines/reference/arrayConcat3.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ function doStuff<T extends object, T1 extends T>(a: Array<Fn<T>>, b: Array<Fn<T1
2525

2626
b.concat(a);
2727
>b.concat(a) : Fn<T1>[]
28-
>b.concat : { (...items: (Fn<T1>[] | ReadonlyArray<Fn<T1>>)[]): Fn<T1>[]; (...items: (Fn<T1> | Fn<T1>[] | ReadonlyArray<Fn<T1>>)[]): Fn<T1>[]; }
28+
>b.concat : { (...items: ConcatArray<Fn<T1>>[]): Fn<T1>[]; (...items: (Fn<T1> | ConcatArray<Fn<T1>>)[]): Fn<T1>[]; }
2929
>b : Fn<T1>[]
30-
>concat : { (...items: (Fn<T1>[] | ReadonlyArray<Fn<T1>>)[]): Fn<T1>[]; (...items: (Fn<T1> | Fn<T1>[] | ReadonlyArray<Fn<T1>>)[]): Fn<T1>[]; }
30+
>concat : { (...items: ConcatArray<Fn<T1>>[]): Fn<T1>[]; (...items: (Fn<T1> | ConcatArray<Fn<T1>>)[]): Fn<T1>[]; }
3131
>a : Fn<T>[]
3232
}
3333

tests/baselines/reference/arrayConcatMap.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ var x = [].concat([{ a: 1 }], [{ a: 2 }])
44
>[].concat([{ a: 1 }], [{ a: 2 }]) .map(b => b.a) : any[]
55
>[].concat([{ a: 1 }], [{ a: 2 }]) .map : <U>(callbackfn: (value: any, index: number, array: any[]) => U, thisArg?: any) => U[]
66
>[].concat([{ a: 1 }], [{ a: 2 }]) : any[]
7-
>[].concat : { (...items: (any[] | ReadonlyArray<any>)[]): any[]; (...items: any[]): any[]; }
7+
>[].concat : { (...items: ConcatArray<any>[]): any[]; (...items: any[]): any[]; }
88
>[] : undefined[]
9-
>concat : { (...items: (any[] | ReadonlyArray<any>)[]): any[]; (...items: any[]): any[]; }
9+
>concat : { (...items: ConcatArray<any>[]): any[]; (...items: any[]): any[]; }
1010
>[{ a: 1 }] : { a: number; }[]
1111
>{ a: 1 } : { a: number; }
1212
>a : number

tests/baselines/reference/arrayOfSubtypeIsAssignableToReadonlyArray.errors.txt

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
tests/cases/compiler/arrayOfSubtypeIsAssignableToReadonlyArray.ts(13,1): error TS2322: Type 'A[]' is not assignable to type 'ReadonlyArray<B>'.
22
Types of property 'concat' are incompatible.
3-
Type '{ (...items: (A[] | ReadonlyArray<A>)[]): A[]; (...items: (A | A[] | ReadonlyArray<A>)[]): A[]; }' is not assignable to type '{ (...items: (B[] | ReadonlyArray<B>)[]): B[]; (...items: (B | B[] | ReadonlyArray<B>)[]): B[]; }'.
3+
Type '{ (...items: ConcatArray<A>[]): A[]; (...items: (A | ConcatArray<A>)[]): A[]; }' is not assignable to type '{ (...items: ConcatArray<B>[]): B[]; (...items: (B | ConcatArray<B>)[]): B[]; }'.
44
Type 'A[]' is not assignable to type 'B[]'.
55
Type 'A' is not assignable to type 'B'.
66
Property 'b' is missing in type 'A'.
77
tests/cases/compiler/arrayOfSubtypeIsAssignableToReadonlyArray.ts(18,1): error TS2322: Type 'C<A>' is not assignable to type 'ReadonlyArray<B>'.
88
Types of property 'concat' are incompatible.
9-
Type '{ (...items: (A[] | ReadonlyArray<A>)[]): A[]; (...items: (A | A[] | ReadonlyArray<A>)[]): A[]; }' is not assignable to type '{ (...items: (B[] | ReadonlyArray<B>)[]): B[]; (...items: (B | B[] | ReadonlyArray<B>)[]): B[]; }'.
9+
Type '{ (...items: ConcatArray<A>[]): A[]; (...items: (A | ConcatArray<A>)[]): A[]; }' is not assignable to type '{ (...items: ConcatArray<B>[]): B[]; (...items: (B | ConcatArray<B>)[]): B[]; }'.
1010
Type 'A[]' is not assignable to type 'B[]'.
1111

1212

@@ -27,7 +27,7 @@ tests/cases/compiler/arrayOfSubtypeIsAssignableToReadonlyArray.ts(18,1): error T
2727
~~~
2828
!!! error TS2322: Type 'A[]' is not assignable to type 'ReadonlyArray<B>'.
2929
!!! error TS2322: Types of property 'concat' are incompatible.
30-
!!! error TS2322: Type '{ (...items: (A[] | ReadonlyArray<A>)[]): A[]; (...items: (A | A[] | ReadonlyArray<A>)[]): A[]; }' is not assignable to type '{ (...items: (B[] | ReadonlyArray<B>)[]): B[]; (...items: (B | B[] | ReadonlyArray<B>)[]): B[]; }'.
30+
!!! error TS2322: Type '{ (...items: ConcatArray<A>[]): A[]; (...items: (A | ConcatArray<A>)[]): A[]; }' is not assignable to type '{ (...items: ConcatArray<B>[]): B[]; (...items: (B | ConcatArray<B>)[]): B[]; }'.
3131
!!! error TS2322: Type 'A[]' is not assignable to type 'B[]'.
3232
!!! error TS2322: Type 'A' is not assignable to type 'B'.
3333
!!! error TS2322: Property 'b' is missing in type 'A'.
@@ -39,6 +39,6 @@ tests/cases/compiler/arrayOfSubtypeIsAssignableToReadonlyArray.ts(18,1): error T
3939
~~~
4040
!!! error TS2322: Type 'C<A>' is not assignable to type 'ReadonlyArray<B>'.
4141
!!! error TS2322: Types of property 'concat' are incompatible.
42-
!!! error TS2322: Type '{ (...items: (A[] | ReadonlyArray<A>)[]): A[]; (...items: (A | A[] | ReadonlyArray<A>)[]): A[]; }' is not assignable to type '{ (...items: (B[] | ReadonlyArray<B>)[]): B[]; (...items: (B | B[] | ReadonlyArray<B>)[]): B[]; }'.
42+
!!! error TS2322: Type '{ (...items: ConcatArray<A>[]): A[]; (...items: (A | ConcatArray<A>)[]): A[]; }' is not assignable to type '{ (...items: ConcatArray<B>[]): B[]; (...items: (B | ConcatArray<B>)[]): B[]; }'.
4343
!!! error TS2322: Type 'A[]' is not assignable to type 'B[]'.
4444

tests/baselines/reference/concatError.types

+4-4
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,19 @@ fa = fa.concat([0]);
1515
>fa = fa.concat([0]) : number[]
1616
>fa : number[]
1717
>fa.concat([0]) : number[]
18-
>fa.concat : { (...items: (number[] | ReadonlyArray<number>)[]): number[]; (...items: (number | number[] | ReadonlyArray<number>)[]): number[]; }
18+
>fa.concat : { (...items: ConcatArray<number>[]): number[]; (...items: (number | ConcatArray<number>)[]): number[]; }
1919
>fa : number[]
20-
>concat : { (...items: (number[] | ReadonlyArray<number>)[]): number[]; (...items: (number | number[] | ReadonlyArray<number>)[]): number[]; }
20+
>concat : { (...items: ConcatArray<number>[]): number[]; (...items: (number | ConcatArray<number>)[]): number[]; }
2121
>[0] : number[]
2222
>0 : 0
2323

2424
fa = fa.concat(0);
2525
>fa = fa.concat(0) : number[]
2626
>fa : number[]
2727
>fa.concat(0) : number[]
28-
>fa.concat : { (...items: (number[] | ReadonlyArray<number>)[]): number[]; (...items: (number | number[] | ReadonlyArray<number>)[]): number[]; }
28+
>fa.concat : { (...items: ConcatArray<number>[]): number[]; (...items: (number | ConcatArray<number>)[]): number[]; }
2929
>fa : number[]
30-
>concat : { (...items: (number[] | ReadonlyArray<number>)[]): number[]; (...items: (number | number[] | ReadonlyArray<number>)[]): number[]; }
30+
>concat : { (...items: ConcatArray<number>[]): number[]; (...items: (number | ConcatArray<number>)[]): number[]; }
3131
>0 : 0
3232

3333

tests/baselines/reference/concatTuples.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ ijs = ijs.concat([[3, 4], [5, 6]]);
1010
>ijs = ijs.concat([[3, 4], [5, 6]]) : [number, number][]
1111
>ijs : [number, number][]
1212
>ijs.concat([[3, 4], [5, 6]]) : [number, number][]
13-
>ijs.concat : { (...items: ([number, number][] | ReadonlyArray<[number, number]>)[]): [number, number][]; (...items: ([number, number] | [number, number][] | ReadonlyArray<[number, number]>)[]): [number, number][]; }
13+
>ijs.concat : { (...items: ConcatArray<[number, number]>[]): [number, number][]; (...items: ([number, number] | ConcatArray<[number, number]>)[]): [number, number][]; }
1414
>ijs : [number, number][]
15-
>concat : { (...items: ([number, number][] | ReadonlyArray<[number, number]>)[]): [number, number][]; (...items: ([number, number] | [number, number][] | ReadonlyArray<[number, number]>)[]): [number, number][]; }
15+
>concat : { (...items: ConcatArray<[number, number]>[]): [number, number][]; (...items: ([number, number] | ConcatArray<[number, number]>)[]): [number, number][]; }
1616
>[[3, 4], [5, 6]] : [number, number][]
1717
>[3, 4] : [number, number]
1818
>3 : 3

tests/baselines/reference/emitSkipsThisWithRestParameter.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ function rebase(fn: (base: any, ...args: any[]) => any): (...args: any[]) => any
1818
>apply : (this: Function, thisArg: any, argArray?: any) => any
1919
>this : any
2020
>[ this ].concat(args) : any[]
21-
>[ this ].concat : { (...items: (any[] | ReadonlyArray<any>)[]): any[]; (...items: any[]): any[]; }
21+
>[ this ].concat : { (...items: ConcatArray<any>[]): any[]; (...items: any[]): any[]; }
2222
>[ this ] : any[]
2323
>this : any
24-
>concat : { (...items: (any[] | ReadonlyArray<any>)[]): any[]; (...items: any[]): any[]; }
24+
>concat : { (...items: ConcatArray<any>[]): any[]; (...items: any[]): any[]; }
2525
>args : any[]
2626

2727
};

tests/baselines/reference/intersectionTypeInference3.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,13 @@ declare const b: Set<A>;
3232
const c1 = Array.from(a).concat(Array.from(b));
3333
>c1 : Nominal<"A", string>[]
3434
>Array.from(a).concat(Array.from(b)) : Nominal<"A", string>[]
35-
>Array.from(a).concat : { (...items: (Nominal<"A", string>[] | ReadonlyArray<Nominal<"A", string>>)[]): Nominal<"A", string>[]; (...items: (Nominal<"A", string> | Nominal<"A", string>[] | ReadonlyArray<Nominal<"A", string>>)[]): Nominal<"A", string>[]; }
35+
>Array.from(a).concat : { (...items: ConcatArray<Nominal<"A", string>>[]): Nominal<"A", string>[]; (...items: (Nominal<"A", string> | ConcatArray<Nominal<"A", string>>)[]): Nominal<"A", string>[]; }
3636
>Array.from(a) : Nominal<"A", string>[]
3737
>Array.from : { <T>(iterable: Iterable<T> | ArrayLike<T>): T[]; <T, U>(iterable: Iterable<T> | ArrayLike<T>, mapfn: (v: T, k: number) => U, thisArg?: any): U[]; <T>(arrayLike: ArrayLike<T>): T[]; <T, U>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => U, thisArg?: any): U[]; }
3838
>Array : ArrayConstructor
3939
>from : { <T>(iterable: Iterable<T> | ArrayLike<T>): T[]; <T, U>(iterable: Iterable<T> | ArrayLike<T>, mapfn: (v: T, k: number) => U, thisArg?: any): U[]; <T>(arrayLike: ArrayLike<T>): T[]; <T, U>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => U, thisArg?: any): U[]; }
4040
>a : Set<Nominal<"A", string>>
41-
>concat : { (...items: (Nominal<"A", string>[] | ReadonlyArray<Nominal<"A", string>>)[]): Nominal<"A", string>[]; (...items: (Nominal<"A", string> | Nominal<"A", string>[] | ReadonlyArray<Nominal<"A", string>>)[]): Nominal<"A", string>[]; }
41+
>concat : { (...items: ConcatArray<Nominal<"A", string>>[]): Nominal<"A", string>[]; (...items: (Nominal<"A", string> | ConcatArray<Nominal<"A", string>>)[]): Nominal<"A", string>[]; }
4242
>Array.from(b) : Nominal<"A", string>[]
4343
>Array.from : { <T>(iterable: Iterable<T> | ArrayLike<T>): T[]; <T, U>(iterable: Iterable<T> | ArrayLike<T>, mapfn: (v: T, k: number) => U, thisArg?: any): U[]; <T>(arrayLike: ArrayLike<T>): T[]; <T, U>(arrayLike: ArrayLike<T>, mapfn: (v: T, k: number) => U, thisArg?: any): U[]; }
4444
>Array : ArrayConstructor
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,9 @@
1-
tests/cases/conformance/es6/spread/iteratorSpreadInArray6.ts(15,14): error TS2345: Argument of type 'symbol[]' is not assignable to parameter of type 'number | number[] | ReadonlyArray<number>'.
2-
Type 'symbol[]' is not assignable to type 'ReadonlyArray<number>'.
3-
Types of property 'concat' are incompatible.
4-
Type '{ (...items: (symbol[] | ReadonlyArray<symbol>)[]): symbol[]; (...items: (symbol | symbol[] | ReadonlyArray<symbol>)[]): symbol[]; }' is not assignable to type '{ (...items: (number[] | ReadonlyArray<number>)[]): number[]; (...items: (number | number[] | ReadonlyArray<number>)[]): number[]; }'.
5-
Types of parameters 'items' and 'items' are incompatible.
6-
Type 'number[] | ReadonlyArray<number>' is not assignable to type 'symbol[] | ReadonlyArray<symbol>'.
7-
Type 'number[]' is not assignable to type 'symbol[] | ReadonlyArray<symbol>'.
8-
Type 'number[]' is not assignable to type 'ReadonlyArray<symbol>'.
9-
Types of property 'concat' are incompatible.
10-
Type '{ (...items: (number[] | ReadonlyArray<number>)[]): number[]; (...items: (number | number[] | ReadonlyArray<number>)[]): number[]; }' is not assignable to type '{ (...items: (symbol[] | ReadonlyArray<symbol>)[]): symbol[]; (...items: (symbol | symbol[] | ReadonlyArray<symbol>)[]): symbol[]; }'.
11-
Types of parameters 'items' and 'items' are incompatible.
12-
Type 'symbol[] | ReadonlyArray<symbol>' is not assignable to type 'number[] | ReadonlyArray<number>'.
13-
Type 'symbol[]' is not assignable to type 'number[] | ReadonlyArray<number>'.
14-
Type 'symbol[]' is not assignable to type 'ReadonlyArray<number>'.
1+
tests/cases/conformance/es6/spread/iteratorSpreadInArray6.ts(15,14): error TS2345: Argument of type 'symbol[]' is not assignable to parameter of type 'number | ConcatArray<number>'.
2+
Type 'symbol[]' is not assignable to type 'ConcatArray<number>'.
3+
Types of property 'slice' are incompatible.
4+
Type '(start?: number, end?: number) => symbol[]' is not assignable to type '(start?: number, end?: number) => number[]'.
5+
Type 'symbol[]' is not assignable to type 'number[]'.
6+
Type 'symbol' is not assignable to type 'number'.
157

168

179
==== tests/cases/conformance/es6/spread/iteratorSpreadInArray6.ts (1 errors) ====
@@ -31,17 +23,9 @@ tests/cases/conformance/es6/spread/iteratorSpreadInArray6.ts(15,14): error TS234
3123
var array: number[] = [0, 1];
3224
array.concat([...new SymbolIterator]);
3325
~~~~~~~~~~~~~~~~~~~~~~~
34-
!!! error TS2345: Argument of type 'symbol[]' is not assignable to parameter of type 'number | number[] | ReadonlyArray<number>'.
35-
!!! error TS2345: Type 'symbol[]' is not assignable to type 'ReadonlyArray<number>'.
36-
!!! error TS2345: Types of property 'concat' are incompatible.
37-
!!! error TS2345: Type '{ (...items: (symbol[] | ReadonlyArray<symbol>)[]): symbol[]; (...items: (symbol | symbol[] | ReadonlyArray<symbol>)[]): symbol[]; }' is not assignable to type '{ (...items: (number[] | ReadonlyArray<number>)[]): number[]; (...items: (number | number[] | ReadonlyArray<number>)[]): number[]; }'.
38-
!!! error TS2345: Types of parameters 'items' and 'items' are incompatible.
39-
!!! error TS2345: Type 'number[] | ReadonlyArray<number>' is not assignable to type 'symbol[] | ReadonlyArray<symbol>'.
40-
!!! error TS2345: Type 'number[]' is not assignable to type 'symbol[] | ReadonlyArray<symbol>'.
41-
!!! error TS2345: Type 'number[]' is not assignable to type 'ReadonlyArray<symbol>'.
42-
!!! error TS2345: Types of property 'concat' are incompatible.
43-
!!! error TS2345: Type '{ (...items: (number[] | ReadonlyArray<number>)[]): number[]; (...items: (number | number[] | ReadonlyArray<number>)[]): number[]; }' is not assignable to type '{ (...items: (symbol[] | ReadonlyArray<symbol>)[]): symbol[]; (...items: (symbol | symbol[] | ReadonlyArray<symbol>)[]): symbol[]; }'.
44-
!!! error TS2345: Types of parameters 'items' and 'items' are incompatible.
45-
!!! error TS2345: Type 'symbol[] | ReadonlyArray<symbol>' is not assignable to type 'number[] | ReadonlyArray<number>'.
46-
!!! error TS2345: Type 'symbol[]' is not assignable to type 'number[] | ReadonlyArray<number>'.
47-
!!! error TS2345: Type 'symbol[]' is not assignable to type 'ReadonlyArray<number>'.
26+
!!! error TS2345: Argument of type 'symbol[]' is not assignable to parameter of type 'number | ConcatArray<number>'.
27+
!!! error TS2345: Type 'symbol[]' is not assignable to type 'ConcatArray<number>'.
28+
!!! error TS2345: Types of property 'slice' are incompatible.
29+
!!! error TS2345: Type '(start?: number, end?: number) => symbol[]' is not assignable to type '(start?: number, end?: number) => number[]'.
30+
!!! error TS2345: Type 'symbol[]' is not assignable to type 'number[]'.
31+
!!! error TS2345: Type 'symbol' is not assignable to type 'number'.

tests/baselines/reference/iteratorSpreadInArray6.types

+2-2
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@ var array: number[] = [0, 1];
3838

3939
array.concat([...new SymbolIterator]);
4040
>array.concat([...new SymbolIterator]) : any
41-
>array.concat : { (...items: (number[] | ReadonlyArray<number>)[]): number[]; (...items: (number | number[] | ReadonlyArray<number>)[]): number[]; }
41+
>array.concat : { (...items: ConcatArray<number>[]): number[]; (...items: (number | ConcatArray<number>)[]): number[]; }
4242
>array : number[]
43-
>concat : { (...items: (number[] | ReadonlyArray<number>)[]): number[]; (...items: (number | number[] | ReadonlyArray<number>)[]): number[]; }
43+
>concat : { (...items: ConcatArray<number>[]): number[]; (...items: (number | ConcatArray<number>)[]): number[]; }
4444
>[...new SymbolIterator] : symbol[]
4545
>...new SymbolIterator : symbol
4646
>new SymbolIterator : SymbolIterator

0 commit comments

Comments
 (0)