@@ -459,3 +459,84 @@ let x: Foo[] = bar(() => !!true ? [{ state: State.A }] : [{ state: State.B }]);
459459>State : Symbol(State, Decl(inferFromGenericFunctionReturnTypes3.ts, 174, 56))
460460>B : Symbol(State.B, Decl(inferFromGenericFunctionReturnTypes3.ts, 176, 15))
461461
462+ // Repros from #31443
463+
464+ enum Enum { A, B }
465+ >Enum : Symbol(Enum, Decl(inferFromGenericFunctionReturnTypes3.ts, 179, 79))
466+ >A : Symbol(Enum.A, Decl(inferFromGenericFunctionReturnTypes3.ts, 183, 11))
467+ >B : Symbol(Enum.B, Decl(inferFromGenericFunctionReturnTypes3.ts, 183, 14))
468+
469+ class ClassWithConvert<T> {
470+ >ClassWithConvert : Symbol(ClassWithConvert, Decl(inferFromGenericFunctionReturnTypes3.ts, 183, 18))
471+ >T : Symbol(T, Decl(inferFromGenericFunctionReturnTypes3.ts, 185, 23))
472+
473+ constructor(val: T) { }
474+ >val : Symbol(val, Decl(inferFromGenericFunctionReturnTypes3.ts, 186, 14))
475+ >T : Symbol(T, Decl(inferFromGenericFunctionReturnTypes3.ts, 185, 23))
476+
477+ convert(converter: { to: (v: T) => T; }) { }
478+ >convert : Symbol(ClassWithConvert.convert, Decl(inferFromGenericFunctionReturnTypes3.ts, 186, 25))
479+ >converter : Symbol(converter, Decl(inferFromGenericFunctionReturnTypes3.ts, 187, 10))
480+ >to : Symbol(to, Decl(inferFromGenericFunctionReturnTypes3.ts, 187, 22))
481+ >v : Symbol(v, Decl(inferFromGenericFunctionReturnTypes3.ts, 187, 28))
482+ >T : Symbol(T, Decl(inferFromGenericFunctionReturnTypes3.ts, 185, 23))
483+ >T : Symbol(T, Decl(inferFromGenericFunctionReturnTypes3.ts, 185, 23))
484+ }
485+
486+ function fn<T>(arg: ClassWithConvert<T>, f: () => ClassWithConvert<T>) { }
487+ >fn : Symbol(fn, Decl(inferFromGenericFunctionReturnTypes3.ts, 188, 1))
488+ >T : Symbol(T, Decl(inferFromGenericFunctionReturnTypes3.ts, 190, 12))
489+ >arg : Symbol(arg, Decl(inferFromGenericFunctionReturnTypes3.ts, 190, 15))
490+ >ClassWithConvert : Symbol(ClassWithConvert, Decl(inferFromGenericFunctionReturnTypes3.ts, 183, 18))
491+ >T : Symbol(T, Decl(inferFromGenericFunctionReturnTypes3.ts, 190, 12))
492+ >f : Symbol(f, Decl(inferFromGenericFunctionReturnTypes3.ts, 190, 40))
493+ >ClassWithConvert : Symbol(ClassWithConvert, Decl(inferFromGenericFunctionReturnTypes3.ts, 183, 18))
494+ >T : Symbol(T, Decl(inferFromGenericFunctionReturnTypes3.ts, 190, 12))
495+
496+ fn(new ClassWithConvert(Enum.A), () => new ClassWithConvert(Enum.A));
497+ >fn : Symbol(fn, Decl(inferFromGenericFunctionReturnTypes3.ts, 188, 1))
498+ >ClassWithConvert : Symbol(ClassWithConvert, Decl(inferFromGenericFunctionReturnTypes3.ts, 183, 18))
499+ >Enum.A : Symbol(Enum.A, Decl(inferFromGenericFunctionReturnTypes3.ts, 183, 11))
500+ >Enum : Symbol(Enum, Decl(inferFromGenericFunctionReturnTypes3.ts, 179, 79))
501+ >A : Symbol(Enum.A, Decl(inferFromGenericFunctionReturnTypes3.ts, 183, 11))
502+ >ClassWithConvert : Symbol(ClassWithConvert, Decl(inferFromGenericFunctionReturnTypes3.ts, 183, 18))
503+ >Enum.A : Symbol(Enum.A, Decl(inferFromGenericFunctionReturnTypes3.ts, 183, 11))
504+ >Enum : Symbol(Enum, Decl(inferFromGenericFunctionReturnTypes3.ts, 179, 79))
505+ >A : Symbol(Enum.A, Decl(inferFromGenericFunctionReturnTypes3.ts, 183, 11))
506+
507+ type Func<T> = (x: T) => T;
508+ >Func : Symbol(Func, Decl(inferFromGenericFunctionReturnTypes3.ts, 191, 69))
509+ >T : Symbol(T, Decl(inferFromGenericFunctionReturnTypes3.ts, 193, 10))
510+ >x : Symbol(x, Decl(inferFromGenericFunctionReturnTypes3.ts, 193, 16))
511+ >T : Symbol(T, Decl(inferFromGenericFunctionReturnTypes3.ts, 193, 10))
512+ >T : Symbol(T, Decl(inferFromGenericFunctionReturnTypes3.ts, 193, 10))
513+
514+ declare function makeFoo<T>(x: T): Func<T>;
515+ >makeFoo : Symbol(makeFoo, Decl(inferFromGenericFunctionReturnTypes3.ts, 193, 27))
516+ >T : Symbol(T, Decl(inferFromGenericFunctionReturnTypes3.ts, 195, 25))
517+ >x : Symbol(x, Decl(inferFromGenericFunctionReturnTypes3.ts, 195, 28))
518+ >T : Symbol(T, Decl(inferFromGenericFunctionReturnTypes3.ts, 195, 25))
519+ >Func : Symbol(Func, Decl(inferFromGenericFunctionReturnTypes3.ts, 191, 69))
520+ >T : Symbol(T, Decl(inferFromGenericFunctionReturnTypes3.ts, 195, 25))
521+
522+ declare function baz<U>(x: Func<U>, y: Func<U>): void;
523+ >baz : Symbol(baz, Decl(inferFromGenericFunctionReturnTypes3.ts, 195, 43))
524+ >U : Symbol(U, Decl(inferFromGenericFunctionReturnTypes3.ts, 196, 21))
525+ >x : Symbol(x, Decl(inferFromGenericFunctionReturnTypes3.ts, 196, 24))
526+ >Func : Symbol(Func, Decl(inferFromGenericFunctionReturnTypes3.ts, 191, 69))
527+ >U : Symbol(U, Decl(inferFromGenericFunctionReturnTypes3.ts, 196, 21))
528+ >y : Symbol(y, Decl(inferFromGenericFunctionReturnTypes3.ts, 196, 35))
529+ >Func : Symbol(Func, Decl(inferFromGenericFunctionReturnTypes3.ts, 191, 69))
530+ >U : Symbol(U, Decl(inferFromGenericFunctionReturnTypes3.ts, 196, 21))
531+
532+ baz(makeFoo(Enum.A), makeFoo(Enum.A));
533+ >baz : Symbol(baz, Decl(inferFromGenericFunctionReturnTypes3.ts, 195, 43))
534+ >makeFoo : Symbol(makeFoo, Decl(inferFromGenericFunctionReturnTypes3.ts, 193, 27))
535+ >Enum.A : Symbol(Enum.A, Decl(inferFromGenericFunctionReturnTypes3.ts, 183, 11))
536+ >Enum : Symbol(Enum, Decl(inferFromGenericFunctionReturnTypes3.ts, 179, 79))
537+ >A : Symbol(Enum.A, Decl(inferFromGenericFunctionReturnTypes3.ts, 183, 11))
538+ >makeFoo : Symbol(makeFoo, Decl(inferFromGenericFunctionReturnTypes3.ts, 193, 27))
539+ >Enum.A : Symbol(Enum.A, Decl(inferFromGenericFunctionReturnTypes3.ts, 183, 11))
540+ >Enum : Symbol(Enum, Decl(inferFromGenericFunctionReturnTypes3.ts, 179, 79))
541+ >A : Symbol(Enum.A, Decl(inferFromGenericFunctionReturnTypes3.ts, 183, 11))
542+
0 commit comments