=== tests/cases/conformance/types/typeParameters/typeArgumentLists/wrappedAndRecursiveConstraints3.ts === // no errors expected class C { >C : C >T : T >length : number constructor(x: T) { } >x : T >T : T foo(x: U) { >foo : (x: U) => (x: V) => V >U : U >T : T >x : U >U : U function bar(x: V) { >bar : (x: V) => V >V : V >U : U >x : V >V : V return x; >x : V } return bar; >bar : (x: V) => V } } var c = new C({ length: 2 }); >c : C<{ length: number; }> >new C({ length: 2 }) : C<{ length: number; }> >C : typeof C >{ length: 2 } : { length: number; } >length : number var r = c.foo({ length: 3, charAt: (x: number) => { '' } }); >r : void; }>(x: V) => V >c.foo({ length: 3, charAt: (x: number) => { '' } }) : void; }>(x: V) => V >c.foo : (x: U) => (x: V) => V >c : C<{ length: number; }> >foo : (x: U) => (x: V) => V >{ length: 3, charAt: (x: number) => { '' } } : { length: number; charAt: (x: number) => void; } >length : number >charAt : (x: number) => void >(x: number) => { '' } : (x: number) => void >x : number var r2 = r(''); >r2 : string >r('') : string >r : void; }>(x: V) => V