Skip to content

Commit 1d83982

Browse files
ExE-BossRyanCavanaugh
authored andcommitted
fix(lib): Loosen Array predicate return types (microsoft#31076)
* fix(lib): Loosen `Array` predicate return types * test(lib): Update baseline files
1 parent 5bc8a8d commit 1d83982

18 files changed

+61
-61
lines changed

src/lib/es2015.core.d.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ interface Array<T> {
99
* predicate. If it is not provided, undefined is used instead.
1010
*/
1111
find<S extends T>(predicate: (this: void, value: T, index: number, obj: T[]) => value is S, thisArg?: any): S | undefined;
12-
find(predicate: (value: T, index: number, obj: T[]) => boolean, thisArg?: any): T | undefined;
12+
find(predicate: (value: T, index: number, obj: T[]) => unknown, thisArg?: any): T | undefined;
1313

1414
/**
1515
* Returns the index of the first element in the array where predicate is true, and -1
@@ -20,7 +20,7 @@ interface Array<T> {
2020
* @param thisArg If provided, it will be used as the this value for each invocation of
2121
* predicate. If it is not provided, undefined is used instead.
2222
*/
23-
findIndex(predicate: (value: T, index: number, obj: T[]) => boolean, thisArg?: any): number;
23+
findIndex(predicate: (value: T, index: number, obj: T[]) => unknown, thisArg?: any): number;
2424

2525
/**
2626
* Returns the this object after filling the section identified by start and end with value
@@ -330,7 +330,7 @@ interface ReadonlyArray<T> {
330330
* predicate. If it is not provided, undefined is used instead.
331331
*/
332332
find<S extends T>(predicate: (this: void, value: T, index: number, obj: ReadonlyArray<T>) => value is S, thisArg?: any): S | undefined;
333-
find(predicate: (value: T, index: number, obj: ReadonlyArray<T>) => boolean, thisArg?: any): T | undefined;
333+
find(predicate: (value: T, index: number, obj: ReadonlyArray<T>) => unknown, thisArg?: any): T | undefined;
334334

335335
/**
336336
* Returns the index of the first element in the array where predicate is true, and -1
@@ -341,7 +341,7 @@ interface ReadonlyArray<T> {
341341
* @param thisArg If provided, it will be used as the this value for each invocation of
342342
* predicate. If it is not provided, undefined is used instead.
343343
*/
344-
findIndex(predicate: (value: T, index: number, obj: ReadonlyArray<T>) => boolean, thisArg?: any): number;
344+
findIndex(predicate: (value: T, index: number, obj: ReadonlyArray<T>) => unknown, thisArg?: any): number;
345345
}
346346

347347
interface RegExp {

src/lib/es5.d.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1273,13 +1273,13 @@ interface Array<T> {
12731273
* @param callbackfn A function that accepts up to three arguments. The every method calls the callbackfn function for each element in array1 until the callbackfn returns false, or until the end of the array.
12741274
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
12751275
*/
1276-
every(callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): boolean;
1276+
every(callbackfn: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean;
12771277
/**
12781278
* Determines whether the specified callback function returns true for any element of an array.
12791279
* @param callbackfn A function that accepts up to three arguments. The some method calls the callbackfn function for each element in array1 until the callbackfn returns true, or until the end of the array.
12801280
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
12811281
*/
1282-
some(callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): boolean;
1282+
some(callbackfn: (value: T, index: number, array: T[]) => unknown, thisArg?: any): boolean;
12831283
/**
12841284
* Performs the specified action for each element in an array.
12851285
* @param callbackfn A function that accepts up to three arguments. forEach calls the callbackfn function one time for each element in the array.
@@ -1303,7 +1303,7 @@ interface Array<T> {
13031303
* @param callbackfn A function that accepts up to three arguments. The filter method calls the callbackfn function one time for each element in the array.
13041304
* @param thisArg An object to which the this keyword can refer in the callbackfn function. If thisArg is omitted, undefined is used as the this value.
13051305
*/
1306-
filter(callbackfn: (value: T, index: number, array: T[]) => any, thisArg?: any): T[];
1306+
filter(callbackfn: (value: T, index: number, array: T[]) => unknown, thisArg?: any): T[];
13071307
/**
13081308
* Calls the specified callback function for all the elements in an array. The return value of the callback function is the accumulated result, and is provided as an argument in the next call to the callback function.
13091309
* @param callbackfn A function that accepts up to four arguments. The reduce method calls the callbackfn function one time for each element in the array.

tests/baselines/reference/2dArrays.types

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ class Board {
2424

2525
return this.ships.every(function (val) { return val.isSunk; });
2626
>this.ships.every(function (val) { return val.isSunk; }) : boolean
27-
>this.ships.every : (callbackfn: (value: Ship, index: number, array: Ship[]) => boolean, thisArg?: any) => boolean
27+
>this.ships.every : (callbackfn: (value: Ship, index: number, array: Ship[]) => unknown, thisArg?: any) => boolean
2828
>this.ships : Ship[]
2929
>this : this
3030
>ships : Ship[]
31-
>every : (callbackfn: (value: Ship, index: number, array: Ship[]) => boolean, thisArg?: any) => boolean
31+
>every : (callbackfn: (value: Ship, index: number, array: Ship[]) => unknown, thisArg?: any) => boolean
3232
>function (val) { return val.isSunk; } : (val: Ship) => boolean
3333
>val : Ship
3434
>val.isSunk : boolean

tests/baselines/reference/arrayFilter.types

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ var foo = [
2222

2323
foo.filter(x => x.name); //should accepted all possible types not only boolean!
2424
>foo.filter(x => x.name) : { name: string; }[]
25-
>foo.filter : { <S extends { name: string; }>(callbackfn: (value: { name: string; }, index: number, array: { name: string; }[]) => value is S, thisArg?: any): S[]; (callbackfn: (value: { name: string; }, index: number, array: { name: string; }[]) => any, thisArg?: any): { name: string; }[]; }
25+
>foo.filter : { <S extends { name: string; }>(callbackfn: (value: { name: string; }, index: number, array: { name: string; }[]) => value is S, thisArg?: any): S[]; (callbackfn: (value: { name: string; }, index: number, array: { name: string; }[]) => unknown, thisArg?: any): { name: string; }[]; }
2626
>foo : { name: string; }[]
27-
>filter : { <S extends { name: string; }>(callbackfn: (value: { name: string; }, index: number, array: { name: string; }[]) => value is S, thisArg?: any): S[]; (callbackfn: (value: { name: string; }, index: number, array: { name: string; }[]) => any, thisArg?: any): { name: string; }[]; }
27+
>filter : { <S extends { name: string; }>(callbackfn: (value: { name: string; }, index: number, array: { name: string; }[]) => value is S, thisArg?: any): S[]; (callbackfn: (value: { name: string; }, index: number, array: { name: string; }[]) => unknown, thisArg?: any): { name: string; }[]; }
2828
>x => x.name : (x: { name: string; }) => string
2929
>x : { name: string; }
3030
>x.name : string

tests/baselines/reference/arrayFind.types

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,9 @@ const arrayOfStringsNumbersAndBooleans = ["string", false, 0, "strung", 1, true]
2424
const foundNumber: number | undefined = arrayOfStringsNumbersAndBooleans.find(isNumber);
2525
>foundNumber : number
2626
>arrayOfStringsNumbersAndBooleans.find(isNumber) : number
27-
>arrayOfStringsNumbersAndBooleans.find : { <S extends string | number | boolean>(predicate: (this: void, value: string | number | boolean, index: number, obj: (string | number | boolean)[]) => value is S, thisArg?: any): S; (predicate: (value: string | number | boolean, index: number, obj: (string | number | boolean)[]) => boolean, thisArg?: any): string | number | boolean; }
27+
>arrayOfStringsNumbersAndBooleans.find : { <S extends string | number | boolean>(predicate: (this: void, value: string | number | boolean, index: number, obj: (string | number | boolean)[]) => value is S, thisArg?: any): S; (predicate: (value: string | number | boolean, index: number, obj: (string | number | boolean)[]) => unknown, thisArg?: any): string | number | boolean; }
2828
>arrayOfStringsNumbersAndBooleans : (string | number | boolean)[]
29-
>find : { <S extends string | number | boolean>(predicate: (this: void, value: string | number | boolean, index: number, obj: (string | number | boolean)[]) => value is S, thisArg?: any): S; (predicate: (value: string | number | boolean, index: number, obj: (string | number | boolean)[]) => boolean, thisArg?: any): string | number | boolean; }
29+
>find : { <S extends string | number | boolean>(predicate: (this: void, value: string | number | boolean, index: number, obj: (string | number | boolean)[]) => value is S, thisArg?: any): S; (predicate: (value: string | number | boolean, index: number, obj: (string | number | boolean)[]) => unknown, thisArg?: any): string | number | boolean; }
3030
>isNumber : (x: any) => x is number
3131

3232
const readonlyArrayOfStringsNumbersAndBooleans = arrayOfStringsNumbersAndBooleans as ReadonlyArray<string | number | boolean>;
@@ -37,8 +37,8 @@ const readonlyArrayOfStringsNumbersAndBooleans = arrayOfStringsNumbersAndBoolean
3737
const readonlyFoundNumber: number | undefined = readonlyArrayOfStringsNumbersAndBooleans.find(isNumber);
3838
>readonlyFoundNumber : number
3939
>readonlyArrayOfStringsNumbersAndBooleans.find(isNumber) : number
40-
>readonlyArrayOfStringsNumbersAndBooleans.find : { <S extends string | number | boolean>(predicate: (this: void, value: string | number | boolean, index: number, obj: readonly (string | number | boolean)[]) => value is S, thisArg?: any): S; (predicate: (value: string | number | boolean, index: number, obj: readonly (string | number | boolean)[]) => boolean, thisArg?: any): string | number | boolean; }
40+
>readonlyArrayOfStringsNumbersAndBooleans.find : { <S extends string | number | boolean>(predicate: (this: void, value: string | number | boolean, index: number, obj: readonly (string | number | boolean)[]) => value is S, thisArg?: any): S; (predicate: (value: string | number | boolean, index: number, obj: readonly (string | number | boolean)[]) => unknown, thisArg?: any): string | number | boolean; }
4141
>readonlyArrayOfStringsNumbersAndBooleans : readonly (string | number | boolean)[]
42-
>find : { <S extends string | number | boolean>(predicate: (this: void, value: string | number | boolean, index: number, obj: readonly (string | number | boolean)[]) => value is S, thisArg?: any): S; (predicate: (value: string | number | boolean, index: number, obj: readonly (string | number | boolean)[]) => boolean, thisArg?: any): string | number | boolean; }
42+
>find : { <S extends string | number | boolean>(predicate: (this: void, value: string | number | boolean, index: number, obj: readonly (string | number | boolean)[]) => value is S, thisArg?: any): S; (predicate: (value: string | number | boolean, index: number, obj: readonly (string | number | boolean)[]) => unknown, thisArg?: any): string | number | boolean; }
4343
>isNumber : (x: any) => x is number
4444

tests/baselines/reference/contextuallyTypedIife.types

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,9 @@
105105
>(...numbers) => numbers.every(n => n > 0) : (numbers_0: number, numbers_1: number, numbers_2: number) => boolean
106106
>numbers : [number, number, number]
107107
>numbers.every(n => n > 0) : boolean
108-
>numbers.every : (callbackfn: (value: number, index: number, array: number[]) => boolean, thisArg?: any) => boolean
108+
>numbers.every : (callbackfn: (value: number, index: number, array: number[]) => unknown, thisArg?: any) => boolean
109109
>numbers : [number, number, number]
110-
>every : (callbackfn: (value: number, index: number, array: number[]) => boolean, thisArg?: any) => boolean
110+
>every : (callbackfn: (value: number, index: number, array: number[]) => unknown, thisArg?: any) => boolean
111111
>n => n > 0 : (n: number) => boolean
112112
>n : number
113113
>n > 0 : boolean
@@ -123,9 +123,9 @@
123123
>(...mixed) => mixed.every(n => !!n) : (mixed_0: number, mixed_1: string, mixed_2: string) => boolean
124124
>mixed : [number, string, string]
125125
>mixed.every(n => !!n) : boolean
126-
>mixed.every : (callbackfn: (value: string | number, index: number, array: (string | number)[]) => boolean, thisArg?: any) => boolean
126+
>mixed.every : (callbackfn: (value: string | number, index: number, array: (string | number)[]) => unknown, thisArg?: any) => boolean
127127
>mixed : [number, string, string]
128-
>every : (callbackfn: (value: string | number, index: number, array: (string | number)[]) => boolean, thisArg?: any) => boolean
128+
>every : (callbackfn: (value: string | number, index: number, array: (string | number)[]) => unknown, thisArg?: any) => boolean
129129
>n => !!n : (n: string | number) => boolean
130130
>n : string | number
131131
>!!n : boolean
@@ -141,9 +141,9 @@
141141
>(...noNumbers) => noNumbers.some(n => n > 0) : () => boolean
142142
>noNumbers : []
143143
>noNumbers.some(n => n > 0) : boolean
144-
>noNumbers.some : (callbackfn: (value: never, index: number, array: never[]) => boolean, thisArg?: any) => boolean
144+
>noNumbers.some : (callbackfn: (value: never, index: number, array: never[]) => unknown, thisArg?: any) => boolean
145145
>noNumbers : []
146-
>some : (callbackfn: (value: never, index: number, array: never[]) => boolean, thisArg?: any) => boolean
146+
>some : (callbackfn: (value: never, index: number, array: never[]) => unknown, thisArg?: any) => boolean
147147
>n => n > 0 : (n: never) => boolean
148148
>n : never
149149
>n > 0 : boolean

tests/baselines/reference/contextuallyTypedIifeStrict.types

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,9 @@
105105
>(...numbers) => numbers.every(n => n > 0) : (numbers_0: number, numbers_1: number, numbers_2: number) => boolean
106106
>numbers : [number, number, number]
107107
>numbers.every(n => n > 0) : boolean
108-
>numbers.every : (callbackfn: (value: number, index: number, array: number[]) => boolean, thisArg?: any) => boolean
108+
>numbers.every : (callbackfn: (value: number, index: number, array: number[]) => unknown, thisArg?: any) => boolean
109109
>numbers : [number, number, number]
110-
>every : (callbackfn: (value: number, index: number, array: number[]) => boolean, thisArg?: any) => boolean
110+
>every : (callbackfn: (value: number, index: number, array: number[]) => unknown, thisArg?: any) => boolean
111111
>n => n > 0 : (n: number) => boolean
112112
>n : number
113113
>n > 0 : boolean
@@ -123,9 +123,9 @@
123123
>(...mixed) => mixed.every(n => !!n) : (mixed_0: number, mixed_1: string, mixed_2: string) => boolean
124124
>mixed : [number, string, string]
125125
>mixed.every(n => !!n) : boolean
126-
>mixed.every : (callbackfn: (value: string | number, index: number, array: (string | number)[]) => boolean, thisArg?: any) => boolean
126+
>mixed.every : (callbackfn: (value: string | number, index: number, array: (string | number)[]) => unknown, thisArg?: any) => boolean
127127
>mixed : [number, string, string]
128-
>every : (callbackfn: (value: string | number, index: number, array: (string | number)[]) => boolean, thisArg?: any) => boolean
128+
>every : (callbackfn: (value: string | number, index: number, array: (string | number)[]) => unknown, thisArg?: any) => boolean
129129
>n => !!n : (n: string | number) => boolean
130130
>n : string | number
131131
>!!n : boolean
@@ -141,9 +141,9 @@
141141
>(...noNumbers) => noNumbers.some(n => n > 0) : () => boolean
142142
>noNumbers : []
143143
>noNumbers.some(n => n > 0) : boolean
144-
>noNumbers.some : (callbackfn: (value: never, index: number, array: never[]) => boolean, thisArg?: any) => boolean
144+
>noNumbers.some : (callbackfn: (value: never, index: number, array: never[]) => unknown, thisArg?: any) => boolean
145145
>noNumbers : []
146-
>some : (callbackfn: (value: never, index: number, array: never[]) => boolean, thisArg?: any) => boolean
146+
>some : (callbackfn: (value: never, index: number, array: never[]) => unknown, thisArg?: any) => boolean
147147
>n => n > 0 : (n: never) => boolean
148148
>n : never
149149
>n > 0 : boolean

tests/baselines/reference/declarationEmitPromise.types

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,14 @@ export async function runSampleWorks<A, B, C, D, E>(
2626
>bluebird : typeof bluebird
2727
>all : bluebird<any>[]
2828
>[a, b, c, d, e].filter(el => !!el) : bluebird<A>[]
29-
>[a, b, c, d, e].filter : { <S extends bluebird<A>>(callbackfn: (value: bluebird<A>, index: number, array: bluebird<A>[]) => value is S, thisArg?: any): S[]; (callbackfn: (value: bluebird<A>, index: number, array: bluebird<A>[]) => any, thisArg?: any): bluebird<A>[]; }
29+
>[a, b, c, d, e].filter : { <S extends bluebird<A>>(callbackfn: (value: bluebird<A>, index: number, array: bluebird<A>[]) => value is S, thisArg?: any): S[]; (callbackfn: (value: bluebird<A>, index: number, array: bluebird<A>[]) => unknown, thisArg?: any): bluebird<A>[]; }
3030
>[a, b, c, d, e] : bluebird<A>[]
3131
>a : bluebird<A>
3232
>b : bluebird<B>
3333
>c : bluebird<C>
3434
>d : bluebird<D>
3535
>e : bluebird<E>
36-
>filter : { <S extends bluebird<A>>(callbackfn: (value: bluebird<A>, index: number, array: bluebird<A>[]) => value is S, thisArg?: any): S[]; (callbackfn: (value: bluebird<A>, index: number, array: bluebird<A>[]) => any, thisArg?: any): bluebird<A>[]; }
36+
>filter : { <S extends bluebird<A>>(callbackfn: (value: bluebird<A>, index: number, array: bluebird<A>[]) => value is S, thisArg?: any): S[]; (callbackfn: (value: bluebird<A>, index: number, array: bluebird<A>[]) => unknown, thisArg?: any): bluebird<A>[]; }
3737
>el => !!el : (el: bluebird<A>) => boolean
3838
>el : bluebird<A>
3939
>!!el : boolean
@@ -88,14 +88,14 @@ export async function runSampleBreaks<A, B, C, D, E>(
8888
>bluebird : typeof bluebird
8989
>all : bluebird<any>[]
9090
>[a, b, c, d, e].filter(el => !!el) : bluebird<A>[]
91-
>[a, b, c, d, e].filter : { <S extends bluebird<A>>(callbackfn: (value: bluebird<A>, index: number, array: bluebird<A>[]) => value is S, thisArg?: any): S[]; (callbackfn: (value: bluebird<A>, index: number, array: bluebird<A>[]) => any, thisArg?: any): bluebird<A>[]; }
91+
>[a, b, c, d, e].filter : { <S extends bluebird<A>>(callbackfn: (value: bluebird<A>, index: number, array: bluebird<A>[]) => value is S, thisArg?: any): S[]; (callbackfn: (value: bluebird<A>, index: number, array: bluebird<A>[]) => unknown, thisArg?: any): bluebird<A>[]; }
9292
>[a, b, c, d, e] : bluebird<A>[]
9393
>a : bluebird<A>
9494
>b : bluebird<B>
9595
>c : bluebird<C>
9696
>d : bluebird<D>
9797
>e : bluebird<E>
98-
>filter : { <S extends bluebird<A>>(callbackfn: (value: bluebird<A>, index: number, array: bluebird<A>[]) => value is S, thisArg?: any): S[]; (callbackfn: (value: bluebird<A>, index: number, array: bluebird<A>[]) => any, thisArg?: any): bluebird<A>[]; }
98+
>filter : { <S extends bluebird<A>>(callbackfn: (value: bluebird<A>, index: number, array: bluebird<A>[]) => value is S, thisArg?: any): S[]; (callbackfn: (value: bluebird<A>, index: number, array: bluebird<A>[]) => unknown, thisArg?: any): bluebird<A>[]; }
9999
>el => !!el : (el: bluebird<A>) => boolean
100100
>el : bluebird<A>
101101
>!!el : boolean

tests/baselines/reference/duplicateLocalVariable1.types

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,9 @@ export class TestRunner {
4141
return (arg1.every(function (val, index) { return val === arg2[index] }));
4242
>(arg1.every(function (val, index) { return val === arg2[index] })) : boolean
4343
>arg1.every(function (val, index) { return val === arg2[index] }) : boolean
44-
>arg1.every : (callbackfn: (value: any, index: number, array: any[]) => boolean, thisArg?: any) => boolean
44+
>arg1.every : (callbackfn: (value: any, index: number, array: any[]) => unknown, thisArg?: any) => boolean
4545
>arg1 : any[]
46-
>every : (callbackfn: (value: any, index: number, array: any[]) => boolean, thisArg?: any) => boolean
46+
>every : (callbackfn: (value: any, index: number, array: any[]) => unknown, thisArg?: any) => boolean
4747
>function (val, index) { return val === arg2[index] } : (val: any, index: number) => boolean
4848
>val : any
4949
>index : number

tests/baselines/reference/genericContextualTypes1.types

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,9 +155,9 @@ const arrayFilter = <T>(f: (x: T) => boolean) => (a: T[]) => a.filter(f);
155155
>(a: T[]) => a.filter(f) : (a: T[]) => T[]
156156
>a : T[]
157157
>a.filter(f) : T[]
158-
>a.filter : { <S extends T>(callbackfn: (value: T, index: number, array: T[]) => value is S, thisArg?: any): S[]; (callbackfn: (value: T, index: number, array: T[]) => any, thisArg?: any): T[]; }
158+
>a.filter : { <S extends T>(callbackfn: (value: T, index: number, array: T[]) => value is S, thisArg?: any): S[]; (callbackfn: (value: T, index: number, array: T[]) => unknown, thisArg?: any): T[]; }
159159
>a : T[]
160-
>filter : { <S extends T>(callbackfn: (value: T, index: number, array: T[]) => value is S, thisArg?: any): S[]; (callbackfn: (value: T, index: number, array: T[]) => any, thisArg?: any): T[]; }
160+
>filter : { <S extends T>(callbackfn: (value: T, index: number, array: T[]) => value is S, thisArg?: any): S[]; (callbackfn: (value: T, index: number, array: T[]) => unknown, thisArg?: any): T[]; }
161161
>f : (x: T) => boolean
162162

163163
const f20: (a: string[]) => number[] = arrayMap(x => x.length);

0 commit comments

Comments
 (0)