@@ -490,3 +490,136 @@ function f37(f: (<T>(a: T) => T) | (new (a: string, b: number) => string[])) {
490490>f : Symbol(f, Decl(instantiationExpressions.ts, 128, 13))
491491}
492492
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