@@ -1141,3 +1141,66 @@ call(...sa, (...x) => 42);
11411141>sa : Symbol(sa, Decl(variadicTuples1.ts, 29, 13))
11421142>x : Symbol(x, Decl(variadicTuples1.ts, 332, 13))
11431143
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