mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-11 10:00:13 -06:00
Array.prototype.filter.not.forcing.boolean (#7779)
* Add test for issue * Fix issue * Add baselines * fix issue
This commit is contained in:
parent
0a2a8cce69
commit
3e2fff2150
22
src/lib/es5.d.ts
vendored
22
src/lib/es5.d.ts
vendored
@ -1064,7 +1064,7 @@ interface ReadonlyArray<T> {
|
||||
* @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.
|
||||
* @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.
|
||||
*/
|
||||
filter(callbackfn: (value: T, index: number, array: ReadonlyArray<T>) => boolean, thisArg?: any): T[];
|
||||
filter(callbackfn: (value: T, index: number, array: ReadonlyArray<T>) => any, thisArg?: any): T[];
|
||||
/**
|
||||
* 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.
|
||||
* @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.
|
||||
@ -1199,7 +1199,7 @@ interface Array<T> {
|
||||
* @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.
|
||||
* @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.
|
||||
*/
|
||||
filter(callbackfn: (value: T, index: number, array: T[]) => boolean, thisArg?: any): T[];
|
||||
filter(callbackfn: (value: T, index: number, array: T[]) => any, thisArg?: any): T[];
|
||||
/**
|
||||
* 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.
|
||||
* @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.
|
||||
@ -1511,7 +1511,7 @@ interface Int8Array {
|
||||
* @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.
|
||||
*/
|
||||
filter(callbackfn: (value: number, index: number, array: Int8Array) => boolean, thisArg?: any): Int8Array;
|
||||
filter(callbackfn: (value: number, index: number, array: Int8Array) => any, thisArg?: any): Int8Array;
|
||||
|
||||
/**
|
||||
* Returns the value of the first element in the array where predicate is true, and undefined
|
||||
@ -1784,7 +1784,7 @@ interface Uint8Array {
|
||||
* @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.
|
||||
*/
|
||||
filter(callbackfn: (value: number, index: number, array: Uint8Array) => boolean, thisArg?: any): Uint8Array;
|
||||
filter(callbackfn: (value: number, index: number, array: Uint8Array) => any, thisArg?: any): Uint8Array;
|
||||
|
||||
/**
|
||||
* Returns the value of the first element in the array where predicate is true, and undefined
|
||||
@ -2058,7 +2058,7 @@ interface Uint8ClampedArray {
|
||||
* @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.
|
||||
*/
|
||||
filter(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => boolean, thisArg?: any): Uint8ClampedArray;
|
||||
filter(callbackfn: (value: number, index: number, array: Uint8ClampedArray) => any, thisArg?: any): Uint8ClampedArray;
|
||||
|
||||
/**
|
||||
* Returns the value of the first element in the array where predicate is true, and undefined
|
||||
@ -2331,7 +2331,7 @@ interface Int16Array {
|
||||
* @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.
|
||||
*/
|
||||
filter(callbackfn: (value: number, index: number, array: Int16Array) => boolean, thisArg?: any): Int16Array;
|
||||
filter(callbackfn: (value: number, index: number, array: Int16Array) => any, thisArg?: any): Int16Array;
|
||||
|
||||
/**
|
||||
* Returns the value of the first element in the array where predicate is true, and undefined
|
||||
@ -2605,7 +2605,7 @@ interface Uint16Array {
|
||||
* @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.
|
||||
*/
|
||||
filter(callbackfn: (value: number, index: number, array: Uint16Array) => boolean, thisArg?: any): Uint16Array;
|
||||
filter(callbackfn: (value: number, index: number, array: Uint16Array) => any, thisArg?: any): Uint16Array;
|
||||
|
||||
/**
|
||||
* Returns the value of the first element in the array where predicate is true, and undefined
|
||||
@ -2878,7 +2878,7 @@ interface Int32Array {
|
||||
* @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.
|
||||
*/
|
||||
filter(callbackfn: (value: number, index: number, array: Int32Array) => boolean, thisArg?: any): Int32Array;
|
||||
filter(callbackfn: (value: number, index: number, array: Int32Array) => any, thisArg?: any): Int32Array;
|
||||
|
||||
/**
|
||||
* Returns the value of the first element in the array where predicate is true, and undefined
|
||||
@ -3151,7 +3151,7 @@ interface Uint32Array {
|
||||
* @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.
|
||||
*/
|
||||
filter(callbackfn: (value: number, index: number, array: Uint32Array) => boolean, thisArg?: any): Uint32Array;
|
||||
filter(callbackfn: (value: number, index: number, array: Uint32Array) => any, thisArg?: any): Uint32Array;
|
||||
|
||||
/**
|
||||
* Returns the value of the first element in the array where predicate is true, and undefined
|
||||
@ -3424,7 +3424,7 @@ interface Float32Array {
|
||||
* @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.
|
||||
*/
|
||||
filter(callbackfn: (value: number, index: number, array: Float32Array) => boolean, thisArg?: any): Float32Array;
|
||||
filter(callbackfn: (value: number, index: number, array: Float32Array) => any, thisArg?: any): Float32Array;
|
||||
|
||||
/**
|
||||
* Returns the value of the first element in the array where predicate is true, and undefined
|
||||
@ -3698,7 +3698,7 @@ interface Float64Array {
|
||||
* @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.
|
||||
*/
|
||||
filter(callbackfn: (value: number, index: number, array: Float64Array) => boolean, thisArg?: any): Float64Array;
|
||||
filter(callbackfn: (value: number, index: number, array: Float64Array) => any, thisArg?: any): Float64Array;
|
||||
|
||||
/**
|
||||
* Returns the value of the first element in the array where predicate is true, and undefined
|
||||
|
||||
16
tests/baselines/reference/arrayFilter.js
Normal file
16
tests/baselines/reference/arrayFilter.js
Normal file
@ -0,0 +1,16 @@
|
||||
//// [arrayFilter.ts]
|
||||
var foo = [
|
||||
{ name: 'bar' },
|
||||
{ name: null },
|
||||
{ name: 'baz' }
|
||||
]
|
||||
|
||||
foo.filter(x => x.name); //should accepted all possible types not only boolean!
|
||||
|
||||
//// [arrayFilter.js]
|
||||
var foo = [
|
||||
{ name: 'bar' },
|
||||
{ name: null },
|
||||
{ name: 'baz' }
|
||||
];
|
||||
foo.filter(function (x) { return x.name; }); //should accepted all possible types not only boolean!
|
||||
24
tests/baselines/reference/arrayFilter.symbols
Normal file
24
tests/baselines/reference/arrayFilter.symbols
Normal file
@ -0,0 +1,24 @@
|
||||
=== tests/cases/compiler/arrayFilter.ts ===
|
||||
var foo = [
|
||||
>foo : Symbol(foo, Decl(arrayFilter.ts, 0, 3))
|
||||
|
||||
{ name: 'bar' },
|
||||
>name : Symbol(name, Decl(arrayFilter.ts, 1, 5))
|
||||
|
||||
{ name: null },
|
||||
>name : Symbol(name, Decl(arrayFilter.ts, 2, 5))
|
||||
|
||||
{ name: 'baz' }
|
||||
>name : Symbol(name, Decl(arrayFilter.ts, 3, 5))
|
||||
|
||||
]
|
||||
|
||||
foo.filter(x => x.name); //should accepted all possible types not only boolean!
|
||||
>foo.filter : Symbol(Array.filter, Decl(lib.d.ts, --, --))
|
||||
>foo : Symbol(foo, Decl(arrayFilter.ts, 0, 3))
|
||||
>filter : Symbol(Array.filter, Decl(lib.d.ts, --, --))
|
||||
>x : Symbol(x, Decl(arrayFilter.ts, 6, 11))
|
||||
>x.name : Symbol(name, Decl(arrayFilter.ts, 1, 5))
|
||||
>x : Symbol(x, Decl(arrayFilter.ts, 6, 11))
|
||||
>name : Symbol(name, Decl(arrayFilter.ts, 1, 5))
|
||||
|
||||
33
tests/baselines/reference/arrayFilter.types
Normal file
33
tests/baselines/reference/arrayFilter.types
Normal file
@ -0,0 +1,33 @@
|
||||
=== tests/cases/compiler/arrayFilter.ts ===
|
||||
var foo = [
|
||||
>foo : { name: string; }[]
|
||||
>[ { name: 'bar' }, { name: null }, { name: 'baz' }] : { name: string; }[]
|
||||
|
||||
{ name: 'bar' },
|
||||
>{ name: 'bar' } : { name: string; }
|
||||
>name : string
|
||||
>'bar' : string
|
||||
|
||||
{ name: null },
|
||||
>{ name: null } : { name: null; }
|
||||
>name : null
|
||||
>null : null
|
||||
|
||||
{ name: 'baz' }
|
||||
>{ name: 'baz' } : { name: string; }
|
||||
>name : string
|
||||
>'baz' : string
|
||||
|
||||
]
|
||||
|
||||
foo.filter(x => x.name); //should accepted all possible types not only boolean!
|
||||
>foo.filter(x => x.name) : { name: string; }[]
|
||||
>foo.filter : (callbackfn: (value: { name: string; }, index: number, array: { name: string; }[]) => any, thisArg?: any) => { name: string; }[]
|
||||
>foo : { name: string; }[]
|
||||
>filter : (callbackfn: (value: { name: string; }, index: number, array: { name: string; }[]) => any, thisArg?: any) => { name: string; }[]
|
||||
>x => x.name : (x: { name: string; }) => string
|
||||
>x : { name: string; }
|
||||
>x.name : string
|
||||
>x : { name: string; }
|
||||
>name : string
|
||||
|
||||
@ -53,9 +53,9 @@ var elements = names.map(function (name) {
|
||||
var xxx = elements.filter(function (e) {
|
||||
>xxx : HTMLElement[]
|
||||
>elements.filter(function (e) { return !e.isDisabled;}) : HTMLElement[]
|
||||
>elements.filter : (callbackfn: (value: HTMLElement, index: number, array: HTMLElement[]) => boolean, thisArg?: any) => HTMLElement[]
|
||||
>elements.filter : (callbackfn: (value: HTMLElement, index: number, array: HTMLElement[]) => any, thisArg?: any) => HTMLElement[]
|
||||
>elements : HTMLElement[]
|
||||
>filter : (callbackfn: (value: HTMLElement, index: number, array: HTMLElement[]) => boolean, thisArg?: any) => HTMLElement[]
|
||||
>filter : (callbackfn: (value: HTMLElement, index: number, array: HTMLElement[]) => any, thisArg?: any) => HTMLElement[]
|
||||
>function (e) { return !e.isDisabled;} : (e: HTMLElement) => boolean
|
||||
>e : HTMLElement
|
||||
|
||||
|
||||
7
tests/cases/compiler/arrayFilter.ts
Normal file
7
tests/cases/compiler/arrayFilter.ts
Normal file
@ -0,0 +1,7 @@
|
||||
var foo = [
|
||||
{ name: 'bar' },
|
||||
{ name: null },
|
||||
{ name: 'baz' }
|
||||
]
|
||||
|
||||
foo.filter(x => x.name); //should accepted all possible types not only boolean!
|
||||
Loading…
x
Reference in New Issue
Block a user