@@ -490,3 +490,136 @@ function f37(f: (<T>(a: T) => T) | (new (a: string, b: number) => string[])) {
490
490
>f : Symbol(f, Decl(instantiationExpressions.ts, 128, 13))
491
491
}
492
492
493
+ function makeBox<T>(value: T) {
494
+ >makeBox : Symbol(makeBox, Decl(instantiationExpressions.ts, 130, 1))
495
+ >T : Symbol(T, Decl(instantiationExpressions.ts, 132, 17))
496
+ >value : Symbol(value, Decl(instantiationExpressions.ts, 132, 20))
497
+ >T : Symbol(T, Decl(instantiationExpressions.ts, 132, 17))
498
+
499
+ return { value };
500
+ >value : Symbol(value, Decl(instantiationExpressions.ts, 133, 12))
501
+ }
502
+
503
+ type BoxFunc<T> = typeof makeBox<T>; // (value: T) => { value: T }
504
+ >BoxFunc : Symbol(BoxFunc, Decl(instantiationExpressions.ts, 134, 1))
505
+ >T : Symbol(T, Decl(instantiationExpressions.ts, 136, 13))
506
+ >makeBox : Symbol(makeBox, Decl(instantiationExpressions.ts, 130, 1))
507
+ >T : Symbol(T, Decl(instantiationExpressions.ts, 136, 13))
508
+
509
+ type StringBoxFunc = BoxFunc<string>; // (value: string) => { value: string }
510
+ >StringBoxFunc : Symbol(StringBoxFunc, Decl(instantiationExpressions.ts, 136, 36))
511
+ >BoxFunc : Symbol(BoxFunc, Decl(instantiationExpressions.ts, 134, 1))
512
+
513
+ type Box<T> = ReturnType<typeof makeBox<T>>; // { value: T }
514
+ >Box : Symbol(Box, Decl(instantiationExpressions.ts, 137, 37))
515
+ >T : Symbol(T, Decl(instantiationExpressions.ts, 139, 9))
516
+ >ReturnType : Symbol(ReturnType, Decl(lib.es5.d.ts, --, --))
517
+ >makeBox : Symbol(makeBox, Decl(instantiationExpressions.ts, 130, 1))
518
+ >T : Symbol(T, Decl(instantiationExpressions.ts, 139, 9))
519
+
520
+ type StringBox = Box<string>; // { value: string }
521
+ >StringBox : Symbol(StringBox, Decl(instantiationExpressions.ts, 139, 44))
522
+ >Box : Symbol(Box, Decl(instantiationExpressions.ts, 137, 37))
523
+
524
+ type A<U> = InstanceType<typeof Array<U>>; // U[]
525
+ >A : Symbol(A, Decl(instantiationExpressions.ts, 140, 29))
526
+ >U : Symbol(U, Decl(instantiationExpressions.ts, 142, 7))
527
+ >InstanceType : Symbol(InstanceType, Decl(lib.es5.d.ts, --, --))
528
+ >Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
529
+ >U : Symbol(U, Decl(instantiationExpressions.ts, 142, 7))
530
+
531
+ declare const g1: {
532
+ >g1 : Symbol(g1, Decl(instantiationExpressions.ts, 144, 13))
533
+
534
+ <T>(a: T): { a: T };
535
+ >T : Symbol(T, Decl(instantiationExpressions.ts, 145, 5))
536
+ >a : Symbol(a, Decl(instantiationExpressions.ts, 145, 8))
537
+ >T : Symbol(T, Decl(instantiationExpressions.ts, 145, 5))
538
+ >a : Symbol(a, Decl(instantiationExpressions.ts, 145, 16))
539
+ >T : Symbol(T, Decl(instantiationExpressions.ts, 145, 5))
540
+
541
+ new <U>(b: U): { b: U };
542
+ >U : Symbol(U, Decl(instantiationExpressions.ts, 146, 9))
543
+ >b : Symbol(b, Decl(instantiationExpressions.ts, 146, 12))
544
+ >U : Symbol(U, Decl(instantiationExpressions.ts, 146, 9))
545
+ >b : Symbol(b, Decl(instantiationExpressions.ts, 146, 20))
546
+ >U : Symbol(U, Decl(instantiationExpressions.ts, 146, 9))
547
+ }
548
+
549
+ type T30<V> = typeof g1<V>; // { (a: V) => { a: V }; new (b: V) => { b: V }; }
550
+ >T30 : Symbol(T30, Decl(instantiationExpressions.ts, 147, 1))
551
+ >V : Symbol(V, Decl(instantiationExpressions.ts, 149, 9))
552
+ >g1 : Symbol(g1, Decl(instantiationExpressions.ts, 144, 13))
553
+ >V : Symbol(V, Decl(instantiationExpressions.ts, 149, 9))
554
+
555
+ type T31<A> = ReturnType<T30<A>>; // { a: A }
556
+ >T31 : Symbol(T31, Decl(instantiationExpressions.ts, 149, 27))
557
+ >A : Symbol(A, Decl(instantiationExpressions.ts, 150, 9))
558
+ >ReturnType : Symbol(ReturnType, Decl(lib.es5.d.ts, --, --))
559
+ >T30 : Symbol(T30, Decl(instantiationExpressions.ts, 147, 1))
560
+ >A : Symbol(A, Decl(instantiationExpressions.ts, 150, 9))
561
+
562
+ type T32<B> = InstanceType<T30<B>>; // { b: B }
563
+ >T32 : Symbol(T32, Decl(instantiationExpressions.ts, 150, 33))
564
+ >B : Symbol(B, Decl(instantiationExpressions.ts, 151, 9))
565
+ >InstanceType : Symbol(InstanceType, Decl(lib.es5.d.ts, --, --))
566
+ >T30 : Symbol(T30, Decl(instantiationExpressions.ts, 147, 1))
567
+ >B : Symbol(B, Decl(instantiationExpressions.ts, 151, 9))
568
+
569
+ declare const g2: {
570
+ >g2 : Symbol(g2, Decl(instantiationExpressions.ts, 153, 13))
571
+
572
+ <T extends string>(a: T): T;
573
+ >T : Symbol(T, Decl(instantiationExpressions.ts, 154, 5))
574
+ >a : Symbol(a, Decl(instantiationExpressions.ts, 154, 23))
575
+ >T : Symbol(T, Decl(instantiationExpressions.ts, 154, 5))
576
+ >T : Symbol(T, Decl(instantiationExpressions.ts, 154, 5))
577
+
578
+ new <T extends number>(b: T): T;
579
+ >T : Symbol(T, Decl(instantiationExpressions.ts, 155, 9))
580
+ >b : Symbol(b, Decl(instantiationExpressions.ts, 155, 27))
581
+ >T : Symbol(T, Decl(instantiationExpressions.ts, 155, 9))
582
+ >T : Symbol(T, Decl(instantiationExpressions.ts, 155, 9))
583
+ }
584
+
585
+ type T40<U extends string> = typeof g2<U>; // Error
586
+ >T40 : Symbol(T40, Decl(instantiationExpressions.ts, 156, 1))
587
+ >U : Symbol(U, Decl(instantiationExpressions.ts, 158, 9))
588
+ >g2 : Symbol(g2, Decl(instantiationExpressions.ts, 153, 13))
589
+ >U : Symbol(U, Decl(instantiationExpressions.ts, 158, 9))
590
+
591
+ type T41<U extends number> = typeof g2<U>; // Error
592
+ >T41 : Symbol(T41, Decl(instantiationExpressions.ts, 158, 42))
593
+ >U : Symbol(U, Decl(instantiationExpressions.ts, 159, 9))
594
+ >g2 : Symbol(g2, Decl(instantiationExpressions.ts, 153, 13))
595
+ >U : Symbol(U, Decl(instantiationExpressions.ts, 159, 9))
596
+
597
+ declare const g3: {
598
+ >g3 : Symbol(g3, Decl(instantiationExpressions.ts, 161, 13))
599
+
600
+ <T extends string>(a: T): T;
601
+ >T : Symbol(T, Decl(instantiationExpressions.ts, 162, 5))
602
+ >a : Symbol(a, Decl(instantiationExpressions.ts, 162, 23))
603
+ >T : Symbol(T, Decl(instantiationExpressions.ts, 162, 5))
604
+ >T : Symbol(T, Decl(instantiationExpressions.ts, 162, 5))
605
+
606
+ new <T extends number, Q>(b: T): T;
607
+ >T : Symbol(T, Decl(instantiationExpressions.ts, 163, 9))
608
+ >Q : Symbol(Q, Decl(instantiationExpressions.ts, 163, 26))
609
+ >b : Symbol(b, Decl(instantiationExpressions.ts, 163, 30))
610
+ >T : Symbol(T, Decl(instantiationExpressions.ts, 163, 9))
611
+ >T : Symbol(T, Decl(instantiationExpressions.ts, 163, 9))
612
+ }
613
+
614
+ type T50<U extends string> = typeof g3<U>; // (a: U) => U
615
+ >T50 : Symbol(T50, Decl(instantiationExpressions.ts, 164, 1))
616
+ >U : Symbol(U, Decl(instantiationExpressions.ts, 166, 9))
617
+ >g3 : Symbol(g3, Decl(instantiationExpressions.ts, 161, 13))
618
+ >U : Symbol(U, Decl(instantiationExpressions.ts, 166, 9))
619
+
620
+ type T51<U extends number> = typeof g3<U, any>; // (b: U) => U
621
+ >T51 : Symbol(T51, Decl(instantiationExpressions.ts, 166, 42))
622
+ >U : Symbol(U, Decl(instantiationExpressions.ts, 167, 9))
623
+ >g3 : Symbol(g3, Decl(instantiationExpressions.ts, 161, 13))
624
+ >U : Symbol(U, Decl(instantiationExpressions.ts, 167, 9))
625
+
0 commit comments