@@ -393,3 +393,97 @@ function f10(foo: Foo) {
393
393
>validateAndClone : Symbol(validateAndClone, Decl(isomorphicMappedTypeInference.ts, 107, 69))
394
394
>foo : Symbol(foo, Decl(isomorphicMappedTypeInference.ts, 115, 13))
395
395
}
396
+
397
+ // Repro from #12606
398
+
399
+ type Func<T> = (...args: any[]) => T;
400
+ >Func : Symbol(Func, Decl(isomorphicMappedTypeInference.ts, 119, 1))
401
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 123, 10))
402
+ >args : Symbol(args, Decl(isomorphicMappedTypeInference.ts, 123, 16))
403
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 123, 10))
404
+
405
+ type Spec<T> = {
406
+ >Spec : Symbol(Spec, Decl(isomorphicMappedTypeInference.ts, 123, 37))
407
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 124, 10))
408
+
409
+ [P in keyof T]: Func<T[P]> | Spec<T[P]> ;
410
+ >P : Symbol(P, Decl(isomorphicMappedTypeInference.ts, 125, 5))
411
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 124, 10))
412
+ >Func : Symbol(Func, Decl(isomorphicMappedTypeInference.ts, 119, 1))
413
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 124, 10))
414
+ >P : Symbol(P, Decl(isomorphicMappedTypeInference.ts, 125, 5))
415
+ >Spec : Symbol(Spec, Decl(isomorphicMappedTypeInference.ts, 123, 37))
416
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 124, 10))
417
+ >P : Symbol(P, Decl(isomorphicMappedTypeInference.ts, 125, 5))
418
+
419
+ };
420
+
421
+ /**
422
+ * Given a spec object recursively mapping properties to functions, creates a function
423
+ * producing an object of the same structure, by mapping each property to the result
424
+ * of calling its associated function with the supplied arguments.
425
+ */
426
+ declare function applySpec<T>(obj: Spec<T>): (...args: any[]) => T;
427
+ >applySpec : Symbol(applySpec, Decl(isomorphicMappedTypeInference.ts, 126, 2))
428
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 133, 27))
429
+ >obj : Symbol(obj, Decl(isomorphicMappedTypeInference.ts, 133, 30))
430
+ >Spec : Symbol(Spec, Decl(isomorphicMappedTypeInference.ts, 123, 37))
431
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 133, 27))
432
+ >args : Symbol(args, Decl(isomorphicMappedTypeInference.ts, 133, 46))
433
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 133, 27))
434
+
435
+ // Infers g1: (...args: any[]) => { sum: number, nested: { mul: string } }
436
+ var g1 = applySpec({
437
+ >g1 : Symbol(g1, Decl(isomorphicMappedTypeInference.ts, 136, 3))
438
+ >applySpec : Symbol(applySpec, Decl(isomorphicMappedTypeInference.ts, 126, 2))
439
+
440
+ sum: (a: any) => 3,
441
+ >sum : Symbol(sum, Decl(isomorphicMappedTypeInference.ts, 136, 20))
442
+ >a : Symbol(a, Decl(isomorphicMappedTypeInference.ts, 137, 10))
443
+
444
+ nested: {
445
+ >nested : Symbol(nested, Decl(isomorphicMappedTypeInference.ts, 137, 23))
446
+
447
+ mul: (b: any) => "n"
448
+ >mul : Symbol(mul, Decl(isomorphicMappedTypeInference.ts, 138, 13))
449
+ >b : Symbol(b, Decl(isomorphicMappedTypeInference.ts, 139, 14))
450
+ }
451
+ });
452
+
453
+ // Infers g2: (...args: any[]) => { foo: { bar: { baz: boolean } } }
454
+ var g2 = applySpec({ foo: { bar: { baz: (x: any) => true } } });
455
+ >g2 : Symbol(g2, Decl(isomorphicMappedTypeInference.ts, 144, 3))
456
+ >applySpec : Symbol(applySpec, Decl(isomorphicMappedTypeInference.ts, 126, 2))
457
+ >foo : Symbol(foo, Decl(isomorphicMappedTypeInference.ts, 144, 20))
458
+ >bar : Symbol(bar, Decl(isomorphicMappedTypeInference.ts, 144, 27))
459
+ >baz : Symbol(baz, Decl(isomorphicMappedTypeInference.ts, 144, 34))
460
+ >x : Symbol(x, Decl(isomorphicMappedTypeInference.ts, 144, 41))
461
+
462
+ // Repro from #12633
463
+
464
+ const foo = <T>(object: T, partial: Partial<T>) => object;
465
+ >foo : Symbol(foo, Decl(isomorphicMappedTypeInference.ts, 148, 5))
466
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 148, 13))
467
+ >object : Symbol(object, Decl(isomorphicMappedTypeInference.ts, 148, 16))
468
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 148, 13))
469
+ >partial : Symbol(partial, Decl(isomorphicMappedTypeInference.ts, 148, 26))
470
+ >Partial : Symbol(Partial, Decl(lib.d.ts, --, --))
471
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 148, 13))
472
+ >object : Symbol(object, Decl(isomorphicMappedTypeInference.ts, 148, 16))
473
+
474
+ let o = {a: 5, b: 7};
475
+ >o : Symbol(o, Decl(isomorphicMappedTypeInference.ts, 149, 3))
476
+ >a : Symbol(a, Decl(isomorphicMappedTypeInference.ts, 149, 9))
477
+ >b : Symbol(b, Decl(isomorphicMappedTypeInference.ts, 149, 14))
478
+
479
+ foo(o, {b: 9});
480
+ >foo : Symbol(foo, Decl(isomorphicMappedTypeInference.ts, 148, 5))
481
+ >o : Symbol(o, Decl(isomorphicMappedTypeInference.ts, 149, 3))
482
+ >b : Symbol(b, Decl(isomorphicMappedTypeInference.ts, 150, 8))
483
+
484
+ o = foo(o, {b: 9});
485
+ >o : Symbol(o, Decl(isomorphicMappedTypeInference.ts, 149, 3))
486
+ >foo : Symbol(foo, Decl(isomorphicMappedTypeInference.ts, 148, 5))
487
+ >o : Symbol(o, Decl(isomorphicMappedTypeInference.ts, 149, 3))
488
+ >b : Symbol(b, Decl(isomorphicMappedTypeInference.ts, 151, 12))
489
+
0 commit comments