@@ -486,3 +486,133 @@ o = foo(o, {b: 9});
486
486
>o : Symbol(o, Decl(isomorphicMappedTypeInference.ts, 148, 3))
487
487
>b : Symbol(b, Decl(isomorphicMappedTypeInference.ts, 150, 12))
488
488
489
+ // Inferring to { [P in K]: X }, where K extends keyof T, produces same inferences as
490
+ // inferring to { [P in keyof T]: X }.
491
+
492
+ declare function f20<T, K extends keyof T>(obj: Pick<T, K>): T;
493
+ >f20 : Symbol(f20, Decl(isomorphicMappedTypeInference.ts, 150, 19))
494
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 155, 21))
495
+ >K : Symbol(K, Decl(isomorphicMappedTypeInference.ts, 155, 23))
496
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 155, 21))
497
+ >obj : Symbol(obj, Decl(isomorphicMappedTypeInference.ts, 155, 43))
498
+ >Pick : Symbol(Pick, Decl(lib.es5.d.ts, --, --))
499
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 155, 21))
500
+ >K : Symbol(K, Decl(isomorphicMappedTypeInference.ts, 155, 23))
501
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 155, 21))
502
+
503
+ declare function f21<T, K extends keyof T>(obj: Pick<T, K>): K;
504
+ >f21 : Symbol(f21, Decl(isomorphicMappedTypeInference.ts, 155, 63))
505
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 156, 21))
506
+ >K : Symbol(K, Decl(isomorphicMappedTypeInference.ts, 156, 23))
507
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 156, 21))
508
+ >obj : Symbol(obj, Decl(isomorphicMappedTypeInference.ts, 156, 43))
509
+ >Pick : Symbol(Pick, Decl(lib.es5.d.ts, --, --))
510
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 156, 21))
511
+ >K : Symbol(K, Decl(isomorphicMappedTypeInference.ts, 156, 23))
512
+ >K : Symbol(K, Decl(isomorphicMappedTypeInference.ts, 156, 23))
513
+
514
+ declare function f22<T, K extends keyof T>(obj: Boxified<Pick<T, K>>): T;
515
+ >f22 : Symbol(f22, Decl(isomorphicMappedTypeInference.ts, 156, 63))
516
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 157, 21))
517
+ >K : Symbol(K, Decl(isomorphicMappedTypeInference.ts, 157, 23))
518
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 157, 21))
519
+ >obj : Symbol(obj, Decl(isomorphicMappedTypeInference.ts, 157, 43))
520
+ >Boxified : Symbol(Boxified, Decl(isomorphicMappedTypeInference.ts, 2, 1))
521
+ >Pick : Symbol(Pick, Decl(lib.es5.d.ts, --, --))
522
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 157, 21))
523
+ >K : Symbol(K, Decl(isomorphicMappedTypeInference.ts, 157, 23))
524
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 157, 21))
525
+
526
+ declare function f23<T, U extends keyof T, K extends U>(obj: Pick<T, K>): T;
527
+ >f23 : Symbol(f23, Decl(isomorphicMappedTypeInference.ts, 157, 73))
528
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 158, 21))
529
+ >U : Symbol(U, Decl(isomorphicMappedTypeInference.ts, 158, 23))
530
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 158, 21))
531
+ >K : Symbol(K, Decl(isomorphicMappedTypeInference.ts, 158, 42))
532
+ >U : Symbol(U, Decl(isomorphicMappedTypeInference.ts, 158, 23))
533
+ >obj : Symbol(obj, Decl(isomorphicMappedTypeInference.ts, 158, 56))
534
+ >Pick : Symbol(Pick, Decl(lib.es5.d.ts, --, --))
535
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 158, 21))
536
+ >K : Symbol(K, Decl(isomorphicMappedTypeInference.ts, 158, 42))
537
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 158, 21))
538
+
539
+ declare function f24<T, U, K extends keyof T | keyof U>(obj: Pick<T & U, K>): T & U;
540
+ >f24 : Symbol(f24, Decl(isomorphicMappedTypeInference.ts, 158, 76))
541
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 159, 21))
542
+ >U : Symbol(U, Decl(isomorphicMappedTypeInference.ts, 159, 23))
543
+ >K : Symbol(K, Decl(isomorphicMappedTypeInference.ts, 159, 26))
544
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 159, 21))
545
+ >U : Symbol(U, Decl(isomorphicMappedTypeInference.ts, 159, 23))
546
+ >obj : Symbol(obj, Decl(isomorphicMappedTypeInference.ts, 159, 56))
547
+ >Pick : Symbol(Pick, Decl(lib.es5.d.ts, --, --))
548
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 159, 21))
549
+ >U : Symbol(U, Decl(isomorphicMappedTypeInference.ts, 159, 23))
550
+ >K : Symbol(K, Decl(isomorphicMappedTypeInference.ts, 159, 26))
551
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 159, 21))
552
+ >U : Symbol(U, Decl(isomorphicMappedTypeInference.ts, 159, 23))
553
+
554
+ let x0 = f20({ foo: 42, bar: "hello" });
555
+ >x0 : Symbol(x0, Decl(isomorphicMappedTypeInference.ts, 161, 3))
556
+ >f20 : Symbol(f20, Decl(isomorphicMappedTypeInference.ts, 150, 19))
557
+ >foo : Symbol(foo, Decl(isomorphicMappedTypeInference.ts, 161, 14))
558
+ >bar : Symbol(bar, Decl(isomorphicMappedTypeInference.ts, 161, 23))
559
+
560
+ let x1 = f21({ foo: 42, bar: "hello" });
561
+ >x1 : Symbol(x1, Decl(isomorphicMappedTypeInference.ts, 162, 3))
562
+ >f21 : Symbol(f21, Decl(isomorphicMappedTypeInference.ts, 155, 63))
563
+ >foo : Symbol(foo, Decl(isomorphicMappedTypeInference.ts, 162, 14))
564
+ >bar : Symbol(bar, Decl(isomorphicMappedTypeInference.ts, 162, 23))
565
+
566
+ let x2 = f22({ foo: { value: 42} , bar: { value: "hello" } });
567
+ >x2 : Symbol(x2, Decl(isomorphicMappedTypeInference.ts, 163, 3))
568
+ >f22 : Symbol(f22, Decl(isomorphicMappedTypeInference.ts, 156, 63))
569
+ >foo : Symbol(foo, Decl(isomorphicMappedTypeInference.ts, 163, 14))
570
+ >value : Symbol(value, Decl(isomorphicMappedTypeInference.ts, 163, 21))
571
+ >bar : Symbol(bar, Decl(isomorphicMappedTypeInference.ts, 163, 34))
572
+ >value : Symbol(value, Decl(isomorphicMappedTypeInference.ts, 163, 41))
573
+
574
+ let x3 = f23({ foo: 42, bar: "hello" });
575
+ >x3 : Symbol(x3, Decl(isomorphicMappedTypeInference.ts, 164, 3))
576
+ >f23 : Symbol(f23, Decl(isomorphicMappedTypeInference.ts, 157, 73))
577
+ >foo : Symbol(foo, Decl(isomorphicMappedTypeInference.ts, 164, 14))
578
+ >bar : Symbol(bar, Decl(isomorphicMappedTypeInference.ts, 164, 23))
579
+
580
+ let x4 = f24({ foo: 42, bar: "hello" });
581
+ >x4 : Symbol(x4, Decl(isomorphicMappedTypeInference.ts, 165, 3))
582
+ >f24 : Symbol(f24, Decl(isomorphicMappedTypeInference.ts, 158, 76))
583
+ >foo : Symbol(foo, Decl(isomorphicMappedTypeInference.ts, 165, 14))
584
+ >bar : Symbol(bar, Decl(isomorphicMappedTypeInference.ts, 165, 23))
585
+
586
+ // Repro from #29765
587
+
588
+ function getProps<T, K extends keyof T>(obj: T, list: K[]): Pick<T, K> {
589
+ >getProps : Symbol(getProps, Decl(isomorphicMappedTypeInference.ts, 165, 40))
590
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 169, 18))
591
+ >K : Symbol(K, Decl(isomorphicMappedTypeInference.ts, 169, 20))
592
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 169, 18))
593
+ >obj : Symbol(obj, Decl(isomorphicMappedTypeInference.ts, 169, 40))
594
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 169, 18))
595
+ >list : Symbol(list, Decl(isomorphicMappedTypeInference.ts, 169, 47))
596
+ >K : Symbol(K, Decl(isomorphicMappedTypeInference.ts, 169, 20))
597
+ >Pick : Symbol(Pick, Decl(lib.es5.d.ts, --, --))
598
+ >T : Symbol(T, Decl(isomorphicMappedTypeInference.ts, 169, 18))
599
+ >K : Symbol(K, Decl(isomorphicMappedTypeInference.ts, 169, 20))
600
+
601
+ return {} as any;
602
+ }
603
+
604
+ const myAny: any = {};
605
+ >myAny : Symbol(myAny, Decl(isomorphicMappedTypeInference.ts, 173, 5))
606
+
607
+ const o1 = getProps(myAny, ['foo', 'bar']);
608
+ >o1 : Symbol(o1, Decl(isomorphicMappedTypeInference.ts, 175, 5))
609
+ >getProps : Symbol(getProps, Decl(isomorphicMappedTypeInference.ts, 165, 40))
610
+ >myAny : Symbol(myAny, Decl(isomorphicMappedTypeInference.ts, 173, 5))
611
+
612
+ const o2: { foo: any; bar: any } = getProps(myAny, ['foo', 'bar']);
613
+ >o2 : Symbol(o2, Decl(isomorphicMappedTypeInference.ts, 177, 5))
614
+ >foo : Symbol(foo, Decl(isomorphicMappedTypeInference.ts, 177, 11))
615
+ >bar : Symbol(bar, Decl(isomorphicMappedTypeInference.ts, 177, 21))
616
+ >getProps : Symbol(getProps, Decl(isomorphicMappedTypeInference.ts, 165, 40))
617
+ >myAny : Symbol(myAny, Decl(isomorphicMappedTypeInference.ts, 173, 5))
618
+
0 commit comments