@@ -1141,3 +1141,66 @@ call(...sa, (...x) => 42);
1141
1141
>sa : Symbol(sa, Decl(variadicTuples1.ts, 29, 13))
1142
1142
>x : Symbol(x, Decl(variadicTuples1.ts, 332, 13))
1143
1143
1144
+ // No inference to ending optional elements (except with identical structure)
1145
+
1146
+ declare function f20<T extends unknown[] = []>(args: [...T, number?]): T;
1147
+ >f20 : Symbol(f20, Decl(variadicTuples1.ts, 332, 26))
1148
+ >T : Symbol(T, Decl(variadicTuples1.ts, 336, 21))
1149
+ >args : Symbol(args, Decl(variadicTuples1.ts, 336, 47))
1150
+ >T : Symbol(T, Decl(variadicTuples1.ts, 336, 21))
1151
+ >T : Symbol(T, Decl(variadicTuples1.ts, 336, 21))
1152
+
1153
+ function f21<U extends string[]>(args: [...U, number?]) {
1154
+ >f21 : Symbol(f21, Decl(variadicTuples1.ts, 336, 73))
1155
+ >U : Symbol(U, Decl(variadicTuples1.ts, 338, 13))
1156
+ >args : Symbol(args, Decl(variadicTuples1.ts, 338, 33))
1157
+ >U : Symbol(U, Decl(variadicTuples1.ts, 338, 13))
1158
+
1159
+ let v1 = f20(args); // U
1160
+ >v1 : Symbol(v1, Decl(variadicTuples1.ts, 339, 7))
1161
+ >f20 : Symbol(f20, Decl(variadicTuples1.ts, 332, 26))
1162
+ >args : Symbol(args, Decl(variadicTuples1.ts, 338, 33))
1163
+
1164
+ let v2 = f20(["foo", "bar"]); // []
1165
+ >v2 : Symbol(v2, Decl(variadicTuples1.ts, 340, 7))
1166
+ >f20 : Symbol(f20, Decl(variadicTuples1.ts, 332, 26))
1167
+
1168
+ let v3 = f20(["foo", 42]); // []
1169
+ >v3 : Symbol(v3, Decl(variadicTuples1.ts, 341, 7))
1170
+ >f20 : Symbol(f20, Decl(variadicTuples1.ts, 332, 26))
1171
+ }
1172
+
1173
+ declare function f22<T extends unknown[] = []>(args: [...T, number]): T;
1174
+ >f22 : Symbol(f22, Decl(variadicTuples1.ts, 342, 1), Decl(variadicTuples1.ts, 344, 72))
1175
+ >T : Symbol(T, Decl(variadicTuples1.ts, 344, 21))
1176
+ >args : Symbol(args, Decl(variadicTuples1.ts, 344, 47))
1177
+ >T : Symbol(T, Decl(variadicTuples1.ts, 344, 21))
1178
+ >T : Symbol(T, Decl(variadicTuples1.ts, 344, 21))
1179
+
1180
+ declare function f22<T extends unknown[] = []>(args: [...T]): T;
1181
+ >f22 : Symbol(f22, Decl(variadicTuples1.ts, 342, 1), Decl(variadicTuples1.ts, 344, 72))
1182
+ >T : Symbol(T, Decl(variadicTuples1.ts, 345, 21))
1183
+ >args : Symbol(args, Decl(variadicTuples1.ts, 345, 47))
1184
+ >T : Symbol(T, Decl(variadicTuples1.ts, 345, 21))
1185
+ >T : Symbol(T, Decl(variadicTuples1.ts, 345, 21))
1186
+
1187
+ function f23<U extends string[]>(args: [...U, number]) {
1188
+ >f23 : Symbol(f23, Decl(variadicTuples1.ts, 345, 64))
1189
+ >U : Symbol(U, Decl(variadicTuples1.ts, 347, 13))
1190
+ >args : Symbol(args, Decl(variadicTuples1.ts, 347, 33))
1191
+ >U : Symbol(U, Decl(variadicTuples1.ts, 347, 13))
1192
+
1193
+ let v1 = f22(args); // U
1194
+ >v1 : Symbol(v1, Decl(variadicTuples1.ts, 348, 7))
1195
+ >f22 : Symbol(f22, Decl(variadicTuples1.ts, 342, 1), Decl(variadicTuples1.ts, 344, 72))
1196
+ >args : Symbol(args, Decl(variadicTuples1.ts, 347, 33))
1197
+
1198
+ let v2 = f22(["foo", "bar"]); // [string, string]
1199
+ >v2 : Symbol(v2, Decl(variadicTuples1.ts, 349, 7))
1200
+ >f22 : Symbol(f22, Decl(variadicTuples1.ts, 342, 1), Decl(variadicTuples1.ts, 344, 72))
1201
+
1202
+ let v3 = f22(["foo", 42]); // [string]
1203
+ >v3 : Symbol(v3, Decl(variadicTuples1.ts, 350, 7))
1204
+ >f22 : Symbol(f22, Decl(variadicTuples1.ts, 342, 1), Decl(variadicTuples1.ts, 344, 72))
1205
+ }
1206
+
0 commit comments