Skip to content

Commit 949f8d2

Browse files
committed
Accept new baselines
1 parent b489104 commit 949f8d2

File tree

3 files changed

+129
-0
lines changed

3 files changed

+129
-0
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
//// [genericRestTypes.ts]
2+
// Repro from #25793
3+
4+
// Gets the parameters of a function type as a tuple
5+
type Parameters<T extends (...args: any[]) => any> = T extends (...args: infer U) => any ? U : never;
6+
// Removes the first element from a tuple
7+
type Tail<T extends any[]> = ((...args: T) => any) extends ((head: any, ...tail: infer U) => any) ? U : never;
8+
9+
type MyFunctionType = (foo: number, bar: string) => boolean;
10+
11+
type Explicit = (...args: Tail<Parameters<MyFunctionType>>) => ReturnType<MyFunctionType>; // (bar: string) => boolean
12+
13+
type Bind1<T extends (head: any, ...tail: any[]) => any> = (...args: Tail<Parameters<T>>) => ReturnType<T>;
14+
type Generic = Bind1<MyFunctionType>; // (bar: string) => boolean
15+
16+
17+
//// [genericRestTypes.js]
18+
"use strict";
19+
// Repro from #25793
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
=== tests/cases/compiler/genericRestTypes.ts ===
2+
// Repro from #25793
3+
4+
// Gets the parameters of a function type as a tuple
5+
type Parameters<T extends (...args: any[]) => any> = T extends (...args: infer U) => any ? U : never;
6+
>Parameters : Symbol(Parameters, Decl(genericRestTypes.ts, 0, 0))
7+
>T : Symbol(T, Decl(genericRestTypes.ts, 3, 16))
8+
>args : Symbol(args, Decl(genericRestTypes.ts, 3, 27))
9+
>T : Symbol(T, Decl(genericRestTypes.ts, 3, 16))
10+
>args : Symbol(args, Decl(genericRestTypes.ts, 3, 64))
11+
>U : Symbol(U, Decl(genericRestTypes.ts, 3, 78))
12+
>U : Symbol(U, Decl(genericRestTypes.ts, 3, 78))
13+
14+
// Removes the first element from a tuple
15+
type Tail<T extends any[]> = ((...args: T) => any) extends ((head: any, ...tail: infer U) => any) ? U : never;
16+
>Tail : Symbol(Tail, Decl(genericRestTypes.ts, 3, 101))
17+
>T : Symbol(T, Decl(genericRestTypes.ts, 5, 10))
18+
>args : Symbol(args, Decl(genericRestTypes.ts, 5, 31))
19+
>T : Symbol(T, Decl(genericRestTypes.ts, 5, 10))
20+
>head : Symbol(head, Decl(genericRestTypes.ts, 5, 61))
21+
>tail : Symbol(tail, Decl(genericRestTypes.ts, 5, 71))
22+
>U : Symbol(U, Decl(genericRestTypes.ts, 5, 86))
23+
>U : Symbol(U, Decl(genericRestTypes.ts, 5, 86))
24+
25+
type MyFunctionType = (foo: number, bar: string) => boolean;
26+
>MyFunctionType : Symbol(MyFunctionType, Decl(genericRestTypes.ts, 5, 110))
27+
>foo : Symbol(foo, Decl(genericRestTypes.ts, 7, 23))
28+
>bar : Symbol(bar, Decl(genericRestTypes.ts, 7, 35))
29+
30+
type Explicit = (...args: Tail<Parameters<MyFunctionType>>) => ReturnType<MyFunctionType>; // (bar: string) => boolean
31+
>Explicit : Symbol(Explicit, Decl(genericRestTypes.ts, 7, 60))
32+
>args : Symbol(args, Decl(genericRestTypes.ts, 9, 17))
33+
>Tail : Symbol(Tail, Decl(genericRestTypes.ts, 3, 101))
34+
>Parameters : Symbol(Parameters, Decl(genericRestTypes.ts, 0, 0))
35+
>MyFunctionType : Symbol(MyFunctionType, Decl(genericRestTypes.ts, 5, 110))
36+
>ReturnType : Symbol(ReturnType, Decl(lib.es5.d.ts, --, --))
37+
>MyFunctionType : Symbol(MyFunctionType, Decl(genericRestTypes.ts, 5, 110))
38+
39+
type Bind1<T extends (head: any, ...tail: any[]) => any> = (...args: Tail<Parameters<T>>) => ReturnType<T>;
40+
>Bind1 : Symbol(Bind1, Decl(genericRestTypes.ts, 9, 90))
41+
>T : Symbol(T, Decl(genericRestTypes.ts, 11, 11))
42+
>head : Symbol(head, Decl(genericRestTypes.ts, 11, 22))
43+
>tail : Symbol(tail, Decl(genericRestTypes.ts, 11, 32))
44+
>args : Symbol(args, Decl(genericRestTypes.ts, 11, 60))
45+
>Tail : Symbol(Tail, Decl(genericRestTypes.ts, 3, 101))
46+
>Parameters : Symbol(Parameters, Decl(genericRestTypes.ts, 0, 0))
47+
>T : Symbol(T, Decl(genericRestTypes.ts, 11, 11))
48+
>ReturnType : Symbol(ReturnType, Decl(lib.es5.d.ts, --, --))
49+
>T : Symbol(T, Decl(genericRestTypes.ts, 11, 11))
50+
51+
type Generic = Bind1<MyFunctionType>; // (bar: string) => boolean
52+
>Generic : Symbol(Generic, Decl(genericRestTypes.ts, 11, 107))
53+
>Bind1 : Symbol(Bind1, Decl(genericRestTypes.ts, 9, 90))
54+
>MyFunctionType : Symbol(MyFunctionType, Decl(genericRestTypes.ts, 5, 110))
55+
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
=== tests/cases/compiler/genericRestTypes.ts ===
2+
// Repro from #25793
3+
4+
// Gets the parameters of a function type as a tuple
5+
type Parameters<T extends (...args: any[]) => any> = T extends (...args: infer U) => any ? U : never;
6+
>Parameters : Parameters<T>
7+
>T : T
8+
>args : any[]
9+
>T : T
10+
>args : U
11+
>U : U
12+
>U : U
13+
14+
// Removes the first element from a tuple
15+
type Tail<T extends any[]> = ((...args: T) => any) extends ((head: any, ...tail: infer U) => any) ? U : never;
16+
>Tail : Tail<T>
17+
>T : T
18+
>args : T
19+
>T : T
20+
>head : any
21+
>tail : U
22+
>U : U
23+
>U : U
24+
25+
type MyFunctionType = (foo: number, bar: string) => boolean;
26+
>MyFunctionType : MyFunctionType
27+
>foo : number
28+
>bar : string
29+
30+
type Explicit = (...args: Tail<Parameters<MyFunctionType>>) => ReturnType<MyFunctionType>; // (bar: string) => boolean
31+
>Explicit : Explicit
32+
>args : [string]
33+
>Tail : Tail<T>
34+
>Parameters : Parameters<T>
35+
>MyFunctionType : MyFunctionType
36+
>ReturnType : ReturnType<T>
37+
>MyFunctionType : MyFunctionType
38+
39+
type Bind1<T extends (head: any, ...tail: any[]) => any> = (...args: Tail<Parameters<T>>) => ReturnType<T>;
40+
>Bind1 : Bind1<T>
41+
>T : T
42+
>head : any
43+
>tail : any[]
44+
>args : Tail<Parameters<T>>
45+
>Tail : Tail<T>
46+
>Parameters : Parameters<T>
47+
>T : T
48+
>ReturnType : ReturnType<T>
49+
>T : T
50+
51+
type Generic = Bind1<MyFunctionType>; // (bar: string) => boolean
52+
>Generic : Bind1<MyFunctionType>
53+
>Bind1 : Bind1<T>
54+
>MyFunctionType : MyFunctionType
55+

0 commit comments

Comments
 (0)