@@ -216,7 +216,7 @@ function foo2(t1: [number, string], t2: [boolean], a1: number[]) {
216
216
}
217
217
218
218
declare function foo3<T extends unknown[]>(x: number, ...args: [...T, number]): T;
219
- >foo3 : <T extends unknown[]>(x: number, ...args_0: T, args_1: number) => T
219
+ >foo3 : <T extends unknown[]>(x: number, ...args: [... T, number] ) => T
220
220
>x : number
221
221
>args : [...T, number]
222
222
@@ -226,21 +226,21 @@ function foo4<U extends unknown[]>(u: U) {
226
226
227
227
foo3(1, 2);
228
228
>foo3(1, 2) : []
229
- >foo3 : <T extends unknown[]>(x: number, ...args_0: T, args_1: number) => T
229
+ >foo3 : <T extends unknown[]>(x: number, ...args: [... T, number] ) => T
230
230
>1 : 1
231
231
>2 : 2
232
232
233
233
foo3(1, 'hello', true, 2);
234
234
>foo3(1, 'hello', true, 2) : [string, boolean]
235
- >foo3 : <T extends unknown[]>(x: number, ...args_0: T, args_1: number) => T
235
+ >foo3 : <T extends unknown[]>(x: number, ...args: [... T, number] ) => T
236
236
>1 : 1
237
237
>'hello' : "hello"
238
238
>true : true
239
239
>2 : 2
240
240
241
241
foo3(1, ...u, 'hi', 2);
242
242
>foo3(1, ...u, 'hi', 2) : [...U, string]
243
- >foo3 : <T extends unknown[]>(x: number, ...args_0: T, args_1: number) => T
243
+ >foo3 : <T extends unknown[]>(x: number, ...args: [... T, number] ) => T
244
244
>1 : 1
245
245
>...u : unknown
246
246
>u : U
@@ -249,7 +249,7 @@ function foo4<U extends unknown[]>(u: U) {
249
249
250
250
foo3(1);
251
251
>foo3(1) : unknown[]
252
- >foo3 : <T extends unknown[]>(x: number, ...args_0: T, args_1: number) => T
252
+ >foo3 : <T extends unknown[]>(x: number, ...args: [... T, number] ) => T
253
253
>1 : 1
254
254
}
255
255
@@ -991,16 +991,16 @@ type R36 = DropLast<readonly []>;
991
991
// Inference to [...T, ...U] with implied arity for T
992
992
993
993
function curry<T extends unknown[], U extends unknown[], R>(f: (...args: [...T, ...U]) => R, ...a: T) {
994
- >curry : <T extends unknown[], U extends unknown[], R>(f: (...args_0: T, ...args_1: U ) => R, ...a: T) => (...b: U) => R
995
- >f : (...args_0: T, ...args_1: U ) => R
994
+ >curry : <T extends unknown[], U extends unknown[], R>(f: (...args: [... T, ...U] ) => R, ...a: T) => (...b: U) => R
995
+ >f : (...args: [... T, ...U] ) => R
996
996
>args : [...T, ...U]
997
997
>a : T
998
998
999
999
return (...b: U) => f(...a, ...b);
1000
1000
>(...b: U) => f(...a, ...b) : (...b: U) => R
1001
1001
>b : U
1002
1002
>f(...a, ...b) : R
1003
- >f : (...args_0: T, ...args_1: U ) => R
1003
+ >f : (...args: [... T, ...U] ) => R
1004
1004
>...a : unknown
1005
1005
>a : T
1006
1006
>...b : unknown
@@ -1019,28 +1019,28 @@ const fn1 = (a: number, b: string, c: boolean, d: string[]) => 0;
1019
1019
const c0 = curry(fn1); // (a: number, b: string, c: boolean, d: string[]) => number
1020
1020
>c0 : (a: number, b: string, c: boolean, d: string[]) => number
1021
1021
>curry(fn1) : (a: number, b: string, c: boolean, d: string[]) => number
1022
- >curry : <T extends unknown[], U extends unknown[], R>(f: (...args_0: T, ...args_1: U ) => R, ...a: T) => (...b: U) => R
1022
+ >curry : <T extends unknown[], U extends unknown[], R>(f: (...args: [... T, ...U] ) => R, ...a: T) => (...b: U) => R
1023
1023
>fn1 : (a: number, b: string, c: boolean, d: string[]) => number
1024
1024
1025
1025
const c1 = curry(fn1, 1); // (b: string, c: boolean, d: string[]) => number
1026
1026
>c1 : (b: string, c: boolean, d: string[]) => number
1027
1027
>curry(fn1, 1) : (b: string, c: boolean, d: string[]) => number
1028
- >curry : <T extends unknown[], U extends unknown[], R>(f: (...args_0: T, ...args_1: U ) => R, ...a: T) => (...b: U) => R
1028
+ >curry : <T extends unknown[], U extends unknown[], R>(f: (...args: [... T, ...U] ) => R, ...a: T) => (...b: U) => R
1029
1029
>fn1 : (a: number, b: string, c: boolean, d: string[]) => number
1030
1030
>1 : 1
1031
1031
1032
1032
const c2 = curry(fn1, 1, 'abc'); // (c: boolean, d: string[]) => number
1033
1033
>c2 : (c: boolean, d: string[]) => number
1034
1034
>curry(fn1, 1, 'abc') : (c: boolean, d: string[]) => number
1035
- >curry : <T extends unknown[], U extends unknown[], R>(f: (...args_0: T, ...args_1: U ) => R, ...a: T) => (...b: U) => R
1035
+ >curry : <T extends unknown[], U extends unknown[], R>(f: (...args: [... T, ...U] ) => R, ...a: T) => (...b: U) => R
1036
1036
>fn1 : (a: number, b: string, c: boolean, d: string[]) => number
1037
1037
>1 : 1
1038
1038
>'abc' : "abc"
1039
1039
1040
1040
const c3 = curry(fn1, 1, 'abc', true); // (d: string[]) => number
1041
1041
>c3 : (d: string[]) => number
1042
1042
>curry(fn1, 1, 'abc', true) : (d: string[]) => number
1043
- >curry : <T extends unknown[], U extends unknown[], R>(f: (...args_0: T, ...args_1: U ) => R, ...a: T) => (...b: U) => R
1043
+ >curry : <T extends unknown[], U extends unknown[], R>(f: (...args: [... T, ...U] ) => R, ...a: T) => (...b: U) => R
1044
1044
>fn1 : (a: number, b: string, c: boolean, d: string[]) => number
1045
1045
>1 : 1
1046
1046
>'abc' : "abc"
@@ -1049,7 +1049,7 @@ const c3 = curry(fn1, 1, 'abc', true); // (d: string[]) => number
1049
1049
const c4 = curry(fn1, 1, 'abc', true, ['x', 'y']); // () => number
1050
1050
>c4 : () => number
1051
1051
>curry(fn1, 1, 'abc', true, ['x', 'y']) : () => number
1052
- >curry : <T extends unknown[], U extends unknown[], R>(f: (...args_0: T, ...args_1: U ) => R, ...a: T) => (...b: U) => R
1052
+ >curry : <T extends unknown[], U extends unknown[], R>(f: (...args: [... T, ...U] ) => R, ...a: T) => (...b: U) => R
1053
1053
>fn1 : (a: number, b: string, c: boolean, d: string[]) => number
1054
1054
>1 : 1
1055
1055
>'abc' : "abc"
@@ -1069,28 +1069,28 @@ const fn2 = (x: number, b: boolean, ...args: string[]) => 0;
1069
1069
const c10 = curry(fn2); // (x: number, b: boolean, ...args: string[]) => number
1070
1070
>c10 : (x: number, b: boolean, ...args: string[]) => number
1071
1071
>curry(fn2) : (x: number, b: boolean, ...args: string[]) => number
1072
- >curry : <T extends unknown[], U extends unknown[], R>(f: (...args_0: T, ...args_1: U ) => R, ...a: T) => (...b: U) => R
1072
+ >curry : <T extends unknown[], U extends unknown[], R>(f: (...args: [... T, ...U] ) => R, ...a: T) => (...b: U) => R
1073
1073
>fn2 : (x: number, b: boolean, ...args: string[]) => number
1074
1074
1075
1075
const c11 = curry(fn2, 1); // (b: boolean, ...args: string[]) => number
1076
1076
>c11 : (b: boolean, ...args: string[]) => number
1077
1077
>curry(fn2, 1) : (b: boolean, ...args: string[]) => number
1078
- >curry : <T extends unknown[], U extends unknown[], R>(f: (...args_0: T, ...args_1: U ) => R, ...a: T) => (...b: U) => R
1078
+ >curry : <T extends unknown[], U extends unknown[], R>(f: (...args: [... T, ...U] ) => R, ...a: T) => (...b: U) => R
1079
1079
>fn2 : (x: number, b: boolean, ...args: string[]) => number
1080
1080
>1 : 1
1081
1081
1082
1082
const c12 = curry(fn2, 1, true); // (...args: string[]) => number
1083
1083
>c12 : (...b: string[]) => number
1084
1084
>curry(fn2, 1, true) : (...b: string[]) => number
1085
- >curry : <T extends unknown[], U extends unknown[], R>(f: (...args_0: T, ...args_1: U ) => R, ...a: T) => (...b: U) => R
1085
+ >curry : <T extends unknown[], U extends unknown[], R>(f: (...args: [... T, ...U] ) => R, ...a: T) => (...b: U) => R
1086
1086
>fn2 : (x: number, b: boolean, ...args: string[]) => number
1087
1087
>1 : 1
1088
1088
>true : true
1089
1089
1090
1090
const c13 = curry(fn2, 1, true, 'abc', 'def'); // (...args: string[]) => number
1091
1091
>c13 : (...b: string[]) => number
1092
1092
>curry(fn2, 1, true, 'abc', 'def') : (...b: string[]) => number
1093
- >curry : <T extends unknown[], U extends unknown[], R>(f: (...args_0: T, ...args_1: U ) => R, ...a: T) => (...b: U) => R
1093
+ >curry : <T extends unknown[], U extends unknown[], R>(f: (...args: [... T, ...U] ) => R, ...a: T) => (...b: U) => R
1094
1094
>fn2 : (x: number, b: boolean, ...args: string[]) => number
1095
1095
>1 : 1
1096
1096
>true : true
@@ -1106,37 +1106,37 @@ const fn3 = (...args: string[]) => 0;
1106
1106
const c20 = curry(fn3); // (...args: string[]) => number
1107
1107
>c20 : (...b: string[]) => number
1108
1108
>curry(fn3) : (...b: string[]) => number
1109
- >curry : <T extends unknown[], U extends unknown[], R>(f: (...args_0: T, ...args_1: U ) => R, ...a: T) => (...b: U) => R
1109
+ >curry : <T extends unknown[], U extends unknown[], R>(f: (...args: [... T, ...U] ) => R, ...a: T) => (...b: U) => R
1110
1110
>fn3 : (...args: string[]) => number
1111
1111
1112
1112
const c21 = curry(fn3, 'abc', 'def'); // (...args: string[]) => number
1113
1113
>c21 : (...b: string[]) => number
1114
1114
>curry(fn3, 'abc', 'def') : (...b: string[]) => number
1115
- >curry : <T extends unknown[], U extends unknown[], R>(f: (...args_0: T, ...args_1: U ) => R, ...a: T) => (...b: U) => R
1115
+ >curry : <T extends unknown[], U extends unknown[], R>(f: (...args: [... T, ...U] ) => R, ...a: T) => (...b: U) => R
1116
1116
>fn3 : (...args: string[]) => number
1117
1117
>'abc' : "abc"
1118
1118
>'def' : "def"
1119
1119
1120
1120
const c22 = curry(fn3, ...sa); // (...args: string[]) => number
1121
1121
>c22 : (...b: string[]) => number
1122
1122
>curry(fn3, ...sa) : (...b: string[]) => number
1123
- >curry : <T extends unknown[], U extends unknown[], R>(f: (...args_0: T, ...args_1: U ) => R, ...a: T) => (...b: U) => R
1123
+ >curry : <T extends unknown[], U extends unknown[], R>(f: (...args: [... T, ...U] ) => R, ...a: T) => (...b: U) => R
1124
1124
>fn3 : (...args: string[]) => number
1125
1125
>...sa : string
1126
1126
>sa : string[]
1127
1127
1128
1128
// No inference to [...T, ...U] when there is no implied arity
1129
1129
1130
1130
function curry2<T extends unknown[], U extends unknown[], R>(f: (...args: [...T, ...U]) => R, t: [...T], u: [...U]) {
1131
- >curry2 : <T extends unknown[], U extends unknown[], R>(f: (...args_0: T, ...args_1: U ) => R, t: [...T], u: [...U]) => R
1132
- >f : (...args_0: T, ...args_1: U ) => R
1131
+ >curry2 : <T extends unknown[], U extends unknown[], R>(f: (...args: [... T, ...U] ) => R, t: [...T], u: [...U]) => R
1132
+ >f : (...args: [... T, ...U] ) => R
1133
1133
>args : [...T, ...U]
1134
1134
>t : [...T]
1135
1135
>u : [...U]
1136
1136
1137
1137
return f(...t, ...u);
1138
1138
>f(...t, ...u) : R
1139
- >f : (...args_0: T, ...args_1: U ) => R
1139
+ >f : (...args: [... T, ...U] ) => R
1140
1140
>...t : T[number]
1141
1141
>t : [...T]
1142
1142
>...u : U[number]
@@ -1151,7 +1151,7 @@ declare function fn10(a: string, b: number, c: boolean): string[];
1151
1151
1152
1152
curry2(fn10, ['hello', 42], [true]);
1153
1153
>curry2(fn10, ['hello', 42], [true]) : string[]
1154
- >curry2 : <T extends unknown[], U extends unknown[], R>(f: (...args_0: T, ...args_1: U ) => R, t: [...T], u: [...U]) => R
1154
+ >curry2 : <T extends unknown[], U extends unknown[], R>(f: (...args: [... T, ...U] ) => R, t: [...T], u: [...U]) => R
1155
1155
>fn10 : (a: string, b: number, c: boolean) => string[]
1156
1156
>['hello', 42] : [string, number]
1157
1157
>'hello' : "hello"
@@ -1161,7 +1161,7 @@ curry2(fn10, ['hello', 42], [true]);
1161
1161
1162
1162
curry2(fn10, ['hello'], [42, true]);
1163
1163
>curry2(fn10, ['hello'], [42, true]) : string[]
1164
- >curry2 : <T extends unknown[], U extends unknown[], R>(f: (...args_0: T, ...args_1: U ) => R, t: [...T], u: [...U]) => R
1164
+ >curry2 : <T extends unknown[], U extends unknown[], R>(f: (...args: [... T, ...U] ) => R, t: [...T], u: [...U]) => R
1165
1165
>fn10 : (a: string, b: number, c: boolean) => string[]
1166
1166
>['hello'] : [string]
1167
1167
>'hello' : "hello"
@@ -1223,13 +1223,13 @@ ft(['a', 'b'], ['c', 'd', 42])
1223
1223
// Last argument is contextually typed
1224
1224
1225
1225
declare function call<T extends unknown[], R>(...args: [...T, (...args: T) => R]): [T, R];
1226
- >call : <T extends unknown[], R>(...args_0: T, args_1: (...args: T) => R) => [T, R]
1226
+ >call : <T extends unknown[], R>(...args: [... T, (...args: T) => R] ) => [T, R]
1227
1227
>args : [...T, (...args: T) => R]
1228
1228
>args : T
1229
1229
1230
1230
call('hello', 32, (a, b) => 42);
1231
1231
>call('hello', 32, (a, b) => 42) : [[string, number], number]
1232
- >call : <T extends unknown[], R>(...args_0: T, args_1: (...args: T) => R) => [T, R]
1232
+ >call : <T extends unknown[], R>(...args: [... T, (...args: T) => R] ) => [T, R]
1233
1233
>'hello' : "hello"
1234
1234
>32 : 32
1235
1235
>(a, b) => 42 : (a: string, b: number) => number
@@ -1242,7 +1242,7 @@ call('hello', 32, (a, b) => 42);
1242
1242
1243
1243
call(...sa, (...x) => 42);
1244
1244
>call(...sa, (...x) => 42) : [(string | ((...x: any[]) => number))[], number]
1245
- >call : <T extends unknown[], R>(...args_0: T, args_1: (...args: T) => R) => [T, R]
1245
+ >call : <T extends unknown[], R>(...args: [... T, (...args: T) => R] ) => [T, R]
1246
1246
>...sa : string
1247
1247
>sa : string[]
1248
1248
>(...x) => 42 : (...x: any[]) => number
@@ -1359,28 +1359,28 @@ declare function getOrgUser(id: string, orgId: number, options?: { y?: number, z
1359
1359
>z : boolean | undefined
1360
1360
1361
1361
function callApi<T extends unknown[] = [], U = void>(method: (...args: [...T, object]) => U) {
1362
- >callApi : <T extends unknown[] = [], U = void>(method: (...args_0: T, args_1: object) => U) => (...args_0: T) => U
1363
- >method : (...args_0: T, args_1: object) => U
1362
+ >callApi : <T extends unknown[] = [], U = void>(method: (...args: [... T, object] ) => U) => (...args_0: T) => U
1363
+ >method : (...args: [... T, object] ) => U
1364
1364
>args : [...T, object]
1365
1365
1366
1366
return (...args: [...T]) => method(...args, {});
1367
1367
>(...args: [...T]) => method(...args, {}) : (...args_0: T) => U
1368
1368
>args : [...T]
1369
1369
>method(...args, {}) : U
1370
- >method : (...args_0: T, args_1: object) => U
1370
+ >method : (...args: [... T, object] ) => U
1371
1371
>...args : T[number]
1372
1372
>args : [...T]
1373
1373
>{} : {}
1374
1374
}
1375
1375
1376
1376
callApi(getUser);
1377
1377
>callApi(getUser) : (id: string) => string
1378
- >callApi : <T extends unknown[] = [], U = void>(method: (...args_0: T, args_1: object) => U) => (...args_0: T) => U
1378
+ >callApi : <T extends unknown[] = [], U = void>(method: (...args: [... T, object] ) => U) => (...args_0: T) => U
1379
1379
>getUser : (id: string, options?: { x?: string | undefined; } | undefined) => string
1380
1380
1381
1381
callApi(getOrgUser);
1382
1382
>callApi(getOrgUser) : (id: string, orgId: number) => void
1383
- >callApi : <T extends unknown[] = [], U = void>(method: (...args_0: T, args_1: object) => U) => (...args_0: T) => U
1383
+ >callApi : <T extends unknown[] = [], U = void>(method: (...args: [... T, object] ) => U) => (...args_0: T) => U
1384
1384
>getOrgUser : (id: string, orgId: number, options?: { y?: number | undefined; z?: boolean | undefined; } | undefined) => void
1385
1385
1386
1386
// Repro from #40235
0 commit comments