Skip to content

Commit 29b4592

Browse files
committed
new test case and results arrayFilterBooleanOverload#56013WithoutExternalOverload
1 parent 591cde8 commit 29b4592

4 files changed

+162
-0
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
//// [tests/cases/compiler/arrayFilterBooleanOverload#56013WithoutExternalOverload.ts] ////
2+
3+
//// [arrayFilterBooleanOverload#56013WithoutExternalOverload.ts]
4+
type NonFalsy<T> = T extends false | 0 | "" | null | undefined | 0n
5+
? never
6+
: T;
7+
8+
const id = <T,>() => (t: T) => !!t;
9+
10+
['foo', 'bar'].filter(id()); // // expect id() = (t: string) => boolean
11+
12+
['foo', 'bar', 1].filter(id()); // // expect id() = (t: string | number) => boolean
13+
14+
declare const maybe: boolean;
15+
(maybe ? ['foo', 'bar'] : [1] ).filter(id()); // expect id() = (t: string | number) => boolean
16+
17+
['foo', 'bar', undefined].filter(id()); // expect id() = (t: string | undefined) => boolean
18+
19+
20+
//// [arrayFilterBooleanOverload#56013WithoutExternalOverload.js]
21+
"use strict";
22+
const id = () => (t) => !!t;
23+
['foo', 'bar'].filter(id()); // // expect id() = (t: string) => boolean
24+
['foo', 'bar', 1].filter(id()); // // expect id() = (t: string | number) => boolean
25+
(maybe ? ['foo', 'bar'] : [1]).filter(id()); // expect id() = (t: string | number) => boolean
26+
['foo', 'bar', undefined].filter(id()); // expect id() = (t: string | undefined) => boolean
27+
28+
29+
//// [arrayFilterBooleanOverload#56013WithoutExternalOverload.d.ts]
30+
type NonFalsy<T> = T extends false | 0 | "" | null | undefined | 0n ? never : T;
31+
declare const id: <T>() => (t: T) => boolean;
32+
declare const maybe: boolean;
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
//// [tests/cases/compiler/arrayFilterBooleanOverload#56013WithoutExternalOverload.ts] ////
2+
3+
=== arrayFilterBooleanOverload#56013WithoutExternalOverload.ts ===
4+
type NonFalsy<T> = T extends false | 0 | "" | null | undefined | 0n
5+
>NonFalsy : Symbol(NonFalsy, Decl(arrayFilterBooleanOverload#56013WithoutExternalOverload.ts, 0, 0))
6+
>T : Symbol(T, Decl(arrayFilterBooleanOverload#56013WithoutExternalOverload.ts, 0, 14))
7+
>T : Symbol(T, Decl(arrayFilterBooleanOverload#56013WithoutExternalOverload.ts, 0, 14))
8+
9+
? never
10+
: T;
11+
>T : Symbol(T, Decl(arrayFilterBooleanOverload#56013WithoutExternalOverload.ts, 0, 14))
12+
13+
const id = <T,>() => (t: T) => !!t;
14+
>id : Symbol(id, Decl(arrayFilterBooleanOverload#56013WithoutExternalOverload.ts, 4, 5))
15+
>T : Symbol(T, Decl(arrayFilterBooleanOverload#56013WithoutExternalOverload.ts, 4, 12))
16+
>t : Symbol(t, Decl(arrayFilterBooleanOverload#56013WithoutExternalOverload.ts, 4, 22))
17+
>T : Symbol(T, Decl(arrayFilterBooleanOverload#56013WithoutExternalOverload.ts, 4, 12))
18+
>t : Symbol(t, Decl(arrayFilterBooleanOverload#56013WithoutExternalOverload.ts, 4, 22))
19+
20+
['foo', 'bar'].filter(id()); // // expect id() = (t: string) => boolean
21+
>['foo', 'bar'].filter : Symbol(Array.filter, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
22+
>filter : Symbol(Array.filter, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
23+
>id : Symbol(id, Decl(arrayFilterBooleanOverload#56013WithoutExternalOverload.ts, 4, 5))
24+
25+
['foo', 'bar', 1].filter(id()); // // expect id() = (t: string | number) => boolean
26+
>['foo', 'bar', 1].filter : Symbol(Array.filter, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
27+
>filter : Symbol(Array.filter, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
28+
>id : Symbol(id, Decl(arrayFilterBooleanOverload#56013WithoutExternalOverload.ts, 4, 5))
29+
30+
declare const maybe: boolean;
31+
>maybe : Symbol(maybe, Decl(arrayFilterBooleanOverload#56013WithoutExternalOverload.ts, 10, 13))
32+
33+
(maybe ? ['foo', 'bar'] : [1] ).filter(id()); // expect id() = (t: string | number) => boolean
34+
>(maybe ? ['foo', 'bar'] : [1] ).filter : Symbol(Array.filter, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --) ... and 1 more)
35+
>maybe : Symbol(maybe, Decl(arrayFilterBooleanOverload#56013WithoutExternalOverload.ts, 10, 13))
36+
>filter : Symbol(Array.filter, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --) ... and 1 more)
37+
>id : Symbol(id, Decl(arrayFilterBooleanOverload#56013WithoutExternalOverload.ts, 4, 5))
38+
39+
['foo', 'bar', undefined].filter(id()); // expect id() = (t: string | undefined) => boolean
40+
>['foo', 'bar', undefined].filter : Symbol(Array.filter, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
41+
>undefined : Symbol(undefined)
42+
>filter : Symbol(Array.filter, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
43+
>id : Symbol(id, Decl(arrayFilterBooleanOverload#56013WithoutExternalOverload.ts, 4, 5))
44+
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
//// [tests/cases/compiler/arrayFilterBooleanOverload#56013WithoutExternalOverload.ts] ////
2+
3+
=== arrayFilterBooleanOverload#56013WithoutExternalOverload.ts ===
4+
type NonFalsy<T> = T extends false | 0 | "" | null | undefined | 0n
5+
>NonFalsy : NonFalsy<T>
6+
>false : false
7+
8+
? never
9+
: T;
10+
11+
const id = <T,>() => (t: T) => !!t;
12+
>id : <T>() => (t: T) => boolean
13+
><T,>() => (t: T) => !!t : <T>() => (t: T) => boolean
14+
>(t: T) => !!t : (t: T) => boolean
15+
>t : T
16+
>!!t : boolean
17+
>!t : boolean
18+
>t : T
19+
20+
['foo', 'bar'].filter(id()); // // expect id() = (t: string) => boolean
21+
>['foo', 'bar'].filter(id()) : string[]
22+
>['foo', 'bar'].filter : { <S extends string>(predicate: (value: string, index: number, array: string[]) => value is S, thisArg?: any): S[]; (predicate: BooleanConstructor, thisArg?: any): string[]; (predicate: (value: string, index: number, array: string[]) => unknown, thisArg?: any): string[]; }
23+
>['foo', 'bar'] : string[]
24+
>'foo' : "foo"
25+
>'bar' : "bar"
26+
>filter : { <S extends string>(predicate: (value: string, index: number, array: string[]) => value is S, thisArg?: any): S[]; (predicate: BooleanConstructor, thisArg?: any): string[]; (predicate: (value: string, index: number, array: string[]) => unknown, thisArg?: any): string[]; }
27+
>id() : (t: string) => boolean
28+
>id : <T>() => (t: T) => boolean
29+
30+
['foo', 'bar', 1].filter(id()); // // expect id() = (t: string | number) => boolean
31+
>['foo', 'bar', 1].filter(id()) : (string | number)[]
32+
>['foo', 'bar', 1].filter : { <S extends string | number>(predicate: (value: string | number, index: number, array: (string | number)[]) => value is S, thisArg?: any): S[]; (predicate: BooleanConstructor, thisArg?: any): (string | number)[]; (predicate: (value: string | number, index: number, array: (string | number)[]) => unknown, thisArg?: any): (string | number)[]; }
33+
>['foo', 'bar', 1] : (string | number)[]
34+
>'foo' : "foo"
35+
>'bar' : "bar"
36+
>1 : 1
37+
>filter : { <S extends string | number>(predicate: (value: string | number, index: number, array: (string | number)[]) => value is S, thisArg?: any): S[]; (predicate: BooleanConstructor, thisArg?: any): (string | number)[]; (predicate: (value: string | number, index: number, array: (string | number)[]) => unknown, thisArg?: any): (string | number)[]; }
38+
>id() : (t: string | number) => boolean
39+
>id : <T>() => (t: T) => boolean
40+
41+
declare const maybe: boolean;
42+
>maybe : boolean
43+
44+
(maybe ? ['foo', 'bar'] : [1] ).filter(id()); // expect id() = (t: string | number) => boolean
45+
>(maybe ? ['foo', 'bar'] : [1] ).filter(id()) : (string | number)[]
46+
>(maybe ? ['foo', 'bar'] : [1] ).filter : { <S extends string>(predicate: (value: string, index: number, array: string[]) => value is S, thisArg?: any): S[]; (predicate: BooleanConstructor, thisArg?: any): string[]; (predicate: (value: string, index: number, array: string[]) => unknown, thisArg?: any): string[]; } | { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): S[]; (predicate: BooleanConstructor, thisArg?: any): number[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): number[]; }
47+
>(maybe ? ['foo', 'bar'] : [1] ) : string[] | number[]
48+
>maybe ? ['foo', 'bar'] : [1] : string[] | number[]
49+
>maybe : boolean
50+
>['foo', 'bar'] : string[]
51+
>'foo' : "foo"
52+
>'bar' : "bar"
53+
>[1] : number[]
54+
>1 : 1
55+
>filter : { <S extends string>(predicate: (value: string, index: number, array: string[]) => value is S, thisArg?: any): S[]; (predicate: BooleanConstructor, thisArg?: any): string[]; (predicate: (value: string, index: number, array: string[]) => unknown, thisArg?: any): string[]; } | { <S extends number>(predicate: (value: number, index: number, array: number[]) => value is S, thisArg?: any): S[]; (predicate: BooleanConstructor, thisArg?: any): number[]; (predicate: (value: number, index: number, array: number[]) => unknown, thisArg?: any): number[]; }
56+
>id() : (t: string | number) => boolean
57+
>id : <T>() => (t: T) => boolean
58+
59+
['foo', 'bar', undefined].filter(id()); // expect id() = (t: string | undefined) => boolean
60+
>['foo', 'bar', undefined].filter(id()) : (string | undefined)[]
61+
>['foo', 'bar', undefined].filter : { <S extends string | undefined>(predicate: (value: string | undefined, index: number, array: (string | undefined)[]) => value is S, thisArg?: any): S[]; (predicate: BooleanConstructor, thisArg?: any): string[]; (predicate: (value: string | undefined, index: number, array: (string | undefined)[]) => unknown, thisArg?: any): (string | undefined)[]; }
62+
>['foo', 'bar', undefined] : (string | undefined)[]
63+
>'foo' : "foo"
64+
>'bar' : "bar"
65+
>undefined : undefined
66+
>filter : { <S extends string | undefined>(predicate: (value: string | undefined, index: number, array: (string | undefined)[]) => value is S, thisArg?: any): S[]; (predicate: BooleanConstructor, thisArg?: any): string[]; (predicate: (value: string | undefined, index: number, array: (string | undefined)[]) => unknown, thisArg?: any): (string | undefined)[]; }
67+
>id() : (t: string | undefined) => boolean
68+
>id : <T>() => (t: T) => boolean
69+
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// @strict: true
2+
// @target: es6
3+
// @declaration: true
4+
type NonFalsy<T> = T extends false | 0 | "" | null | undefined | 0n
5+
? never
6+
: T;
7+
8+
const id = <T,>() => (t: T) => !!t;
9+
10+
['foo', 'bar'].filter(id()); // // expect id() = (t: string) => boolean
11+
12+
['foo', 'bar', 1].filter(id()); // // expect id() = (t: string | number) => boolean
13+
14+
declare const maybe: boolean;
15+
(maybe ? ['foo', 'bar'] : [1] ).filter(id()); // expect id() = (t: string | number) => boolean
16+
17+
['foo', 'bar', undefined].filter(id()); // expect id() = (t: string | undefined) => boolean

0 commit comments

Comments
 (0)