@@ -225,3 +225,97 @@ const resolveMapper2 = <K extends keyof typeof mapper>(
225
225
>key : Symbol(key, Decl(mappedTypeIndexedAccessConstraint.ts, 54, 55))
226
226
>o : Symbol(o, Decl(mappedTypeIndexedAccessConstraint.ts, 55, 11))
227
227
228
+ // Repro from #57860
229
+
230
+ type Obj1 = {
231
+ >Obj1 : Symbol(Obj1, Decl(mappedTypeIndexedAccessConstraint.ts, 55, 49))
232
+
233
+ a: string;
234
+ >a : Symbol(a, Decl(mappedTypeIndexedAccessConstraint.ts, 59, 13))
235
+
236
+ b: number;
237
+ >b : Symbol(b, Decl(mappedTypeIndexedAccessConstraint.ts, 60, 14))
238
+
239
+ };
240
+
241
+ type Obj2 = {
242
+ >Obj2 : Symbol(Obj2, Decl(mappedTypeIndexedAccessConstraint.ts, 62, 2))
243
+
244
+ b: number;
245
+ >b : Symbol(b, Decl(mappedTypeIndexedAccessConstraint.ts, 64, 13))
246
+
247
+ c: boolean;
248
+ >c : Symbol(c, Decl(mappedTypeIndexedAccessConstraint.ts, 65, 14))
249
+
250
+ };
251
+
252
+ declare const mapIntersection: {
253
+ >mapIntersection : Symbol(mapIntersection, Decl(mappedTypeIndexedAccessConstraint.ts, 69, 13))
254
+
255
+ [K in keyof (Partial<Obj1> & Required<Obj2>)]: number;
256
+ >K : Symbol(K, Decl(mappedTypeIndexedAccessConstraint.ts, 70, 5))
257
+ >Partial : Symbol(Partial, Decl(lib.es5.d.ts, --, --))
258
+ >Obj1 : Symbol(Obj1, Decl(mappedTypeIndexedAccessConstraint.ts, 55, 49))
259
+ >Required : Symbol(Required, Decl(lib.es5.d.ts, --, --))
260
+ >Obj2 : Symbol(Obj2, Decl(mappedTypeIndexedAccessConstraint.ts, 62, 2))
261
+
262
+ };
263
+
264
+ const accessMapped = <K extends keyof Obj2>(key: K) => mapIntersection[key].toString();
265
+ >accessMapped : Symbol(accessMapped, Decl(mappedTypeIndexedAccessConstraint.ts, 73, 5))
266
+ >K : Symbol(K, Decl(mappedTypeIndexedAccessConstraint.ts, 73, 22))
267
+ >Obj2 : Symbol(Obj2, Decl(mappedTypeIndexedAccessConstraint.ts, 62, 2))
268
+ >key : Symbol(key, Decl(mappedTypeIndexedAccessConstraint.ts, 73, 44))
269
+ >K : Symbol(K, Decl(mappedTypeIndexedAccessConstraint.ts, 73, 22))
270
+ >mapIntersection[key].toString : Symbol(Number.toString, Decl(lib.es5.d.ts, --, --))
271
+ >mapIntersection : Symbol(mapIntersection, Decl(mappedTypeIndexedAccessConstraint.ts, 69, 13))
272
+ >key : Symbol(key, Decl(mappedTypeIndexedAccessConstraint.ts, 73, 44))
273
+ >toString : Symbol(Number.toString, Decl(lib.es5.d.ts, --, --))
274
+
275
+ declare const resolved: { a?: number | undefined; b: number; c: number };
276
+ >resolved : Symbol(resolved, Decl(mappedTypeIndexedAccessConstraint.ts, 75, 13))
277
+ >a : Symbol(a, Decl(mappedTypeIndexedAccessConstraint.ts, 75, 25))
278
+ >b : Symbol(b, Decl(mappedTypeIndexedAccessConstraint.ts, 75, 49))
279
+ >c : Symbol(c, Decl(mappedTypeIndexedAccessConstraint.ts, 75, 60))
280
+
281
+ const accessResolved = <K extends keyof Obj2>(key: K) => resolved[key].toString();
282
+ >accessResolved : Symbol(accessResolved, Decl(mappedTypeIndexedAccessConstraint.ts, 77, 5))
283
+ >K : Symbol(K, Decl(mappedTypeIndexedAccessConstraint.ts, 77, 24))
284
+ >Obj2 : Symbol(Obj2, Decl(mappedTypeIndexedAccessConstraint.ts, 62, 2))
285
+ >key : Symbol(key, Decl(mappedTypeIndexedAccessConstraint.ts, 77, 46))
286
+ >K : Symbol(K, Decl(mappedTypeIndexedAccessConstraint.ts, 77, 24))
287
+ >resolved[key].toString : Symbol(Number.toString, Decl(lib.es5.d.ts, --, --))
288
+ >resolved : Symbol(resolved, Decl(mappedTypeIndexedAccessConstraint.ts, 75, 13))
289
+ >key : Symbol(key, Decl(mappedTypeIndexedAccessConstraint.ts, 77, 46))
290
+ >toString : Symbol(Number.toString, Decl(lib.es5.d.ts, --, --))
291
+
292
+ // Additional repro from #57860
293
+
294
+ type Foo = {
295
+ >Foo : Symbol(Foo, Decl(mappedTypeIndexedAccessConstraint.ts, 77, 82))
296
+
297
+ prop: string;
298
+ >prop : Symbol(prop, Decl(mappedTypeIndexedAccessConstraint.ts, 81, 12))
299
+ }
300
+
301
+ function test<K extends keyof Foo>(obj: Pick<Required<Foo> & Partial<Foo>, K>, key: K) {
302
+ >test : Symbol(test, Decl(mappedTypeIndexedAccessConstraint.ts, 83, 1))
303
+ >K : Symbol(K, Decl(mappedTypeIndexedAccessConstraint.ts, 85, 14))
304
+ >Foo : Symbol(Foo, Decl(mappedTypeIndexedAccessConstraint.ts, 77, 82))
305
+ >obj : Symbol(obj, Decl(mappedTypeIndexedAccessConstraint.ts, 85, 35))
306
+ >Pick : Symbol(Pick, Decl(lib.es5.d.ts, --, --))
307
+ >Required : Symbol(Required, Decl(lib.es5.d.ts, --, --))
308
+ >Foo : Symbol(Foo, Decl(mappedTypeIndexedAccessConstraint.ts, 77, 82))
309
+ >Partial : Symbol(Partial, Decl(lib.es5.d.ts, --, --))
310
+ >Foo : Symbol(Foo, Decl(mappedTypeIndexedAccessConstraint.ts, 77, 82))
311
+ >K : Symbol(K, Decl(mappedTypeIndexedAccessConstraint.ts, 85, 14))
312
+ >key : Symbol(key, Decl(mappedTypeIndexedAccessConstraint.ts, 85, 78))
313
+ >K : Symbol(K, Decl(mappedTypeIndexedAccessConstraint.ts, 85, 14))
314
+
315
+ obj[key].length;
316
+ >obj[key].length : Symbol(String.length, Decl(lib.es5.d.ts, --, --))
317
+ >obj : Symbol(obj, Decl(mappedTypeIndexedAccessConstraint.ts, 85, 35))
318
+ >key : Symbol(key, Decl(mappedTypeIndexedAccessConstraint.ts, 85, 78))
319
+ >length : Symbol(String.length, Decl(lib.es5.d.ts, --, --))
320
+ }
321
+
0 commit comments