=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithGenericConstructSignaturesDifferingTypeParameterNames.ts === // object types are identical structurally class B { >B : B >U : U constructor(x: U) { return null; } >x : U >U : U >null : null } class C { >C : C >V : V constructor(x: V) { return null; } >x : V >V : V >null : null } interface I { >I : I >X : X new(x: X): B; >x : X >X : X >B : B >X : X } interface I2 { >I2 : I2 new(x: Y): C; >Y : Y >x : Y >Y : Y >C : C >Y : Y } var a: { new(x: Z): B } >a : new (x: Z) => B >Z : Z >x : Z >Z : Z >B : B >Z : Z var b = { new(x: A) { return new C(x); } }; >b : { new(x: A): C; } >{ new(x: A) { return new C(x); } } : { new(x: A): C; } >new : (x: A) => C >A : A >x : A >A : A >new C(x) : C >C : typeof C >A : A >x : A function foo1b(x: B); >foo1b : { (x: B): any; (x: B): any; } >x : B >B : B function foo1b(x: B); // error >foo1b : { (x: B): any; (x: B): any; } >x : B >B : B function foo1b(x: any) { } >foo1b : { (x: B): any; (x: B): any; } >x : any function foo1c(x: C); >foo1c : { (x: C): any; (x: C): any; } >x : C >C : C function foo1c(x: C); // error >foo1c : { (x: C): any; (x: C): any; } >x : C >C : C function foo1c(x: any) { } >foo1c : { (x: C): any; (x: C): any; } >x : any function foo2(x: I); >foo2 : { (x: I): any; (x: I): any; } >x : I >I : I function foo2(x: I); // error >foo2 : { (x: I): any; (x: I): any; } >x : I >I : I function foo2(x: any) { } >foo2 : { (x: I): any; (x: I): any; } >x : any function foo3(x: typeof a); >foo3 : { (x: new (x: Z) => B): any; (x: new (x: Z) => B): any; } >x : new (x: Z) => B >a : new (x: Z) => B function foo3(x: typeof a); // error >foo3 : { (x: new (x: Z) => B): any; (x: new (x: Z) => B): any; } >x : new (x: Z) => B >a : new (x: Z) => B function foo3(x: any) { } >foo3 : { (x: new (x: Z) => B): any; (x: new (x: Z) => B): any; } >x : any function foo4(x: typeof b); >foo4 : { (x: { new(x: A): C; }): any; (x: { new(x: A): C; }): any; } >x : { new(x: A): C; } >b : { new(x: A): C; } function foo4(x: typeof b); // error >foo4 : { (x: { new(x: A): C; }): any; (x: { new(x: A): C; }): any; } >x : { new(x: A): C; } >b : { new(x: A): C; } function foo4(x: any) { } >foo4 : { (x: { new(x: A): C; }): any; (x: { new(x: A): C; }): any; } >x : any function foo8(x: B); >foo8 : { (x: B): any; (x: I): any; } >x : B >B : B function foo8(x: I); // BUG 832086 >foo8 : { (x: B): any; (x: I): any; } >x : I >I : I function foo8(x: any) { } >foo8 : { (x: B): any; (x: I): any; } >x : any function foo9(x: B); >foo9 : { (x: B): any; (x: C): any; } >x : B >B : B function foo9(x: C); // error >foo9 : { (x: B): any; (x: C): any; } >x : C >C : C function foo9(x: any) { } >foo9 : { (x: B): any; (x: C): any; } >x : any function foo10(x: B); >foo10 : { (x: B): any; (x: new (x: Z) => B): any; } >x : B >B : B function foo10(x: typeof a); // BUG 832086 >foo10 : { (x: B): any; (x: new (x: Z) => B): any; } >x : new (x: Z) => B >a : new (x: Z) => B function foo10(x: any) { } >foo10 : { (x: B): any; (x: new (x: Z) => B): any; } >x : any function foo11(x: B); >foo11 : { (x: B): any; (x: { new(x: A): C; }): any; } >x : B >B : B function foo11(x: typeof b); // ok >foo11 : { (x: B): any; (x: { new(x: A): C; }): any; } >x : { new(x: A): C; } >b : { new(x: A): C; } function foo11(x: any) { } >foo11 : { (x: B): any; (x: { new(x: A): C; }): any; } >x : any function foo12(x: I); >foo12 : { (x: I): any; (x: C): any; } >x : I >I : I function foo12(x: C); // error >foo12 : { (x: I): any; (x: C): any; } >x : C >C : C function foo12(x: any) { } >foo12 : { (x: I): any; (x: C): any; } >x : any function foo12b(x: I2); >foo12b : { (x: I2): any; (x: C): any; } >x : I2 >I2 : I2 function foo12b(x: C); // BUG 832086 >foo12b : { (x: I2): any; (x: C): any; } >x : C >C : C function foo12b(x: any) { } >foo12b : { (x: I2): any; (x: C): any; } >x : any function foo13(x: I); >foo13 : { (x: I): any; (x: new (x: Z) => B): any; } >x : I >I : I function foo13(x: typeof a); // BUG 832086 >foo13 : { (x: I): any; (x: new (x: Z) => B): any; } >x : new (x: Z) => B >a : new (x: Z) => B function foo13(x: any) { } >foo13 : { (x: I): any; (x: new (x: Z) => B): any; } >x : any function foo14(x: I); >foo14 : { (x: I): any; (x: { new(x: A): C; }): any; } >x : I >I : I function foo14(x: typeof b); // ok >foo14 : { (x: I): any; (x: { new(x: A): C; }): any; } >x : { new(x: A): C; } >b : { new(x: A): C; } function foo14(x: any) { } >foo14 : { (x: I): any; (x: { new(x: A): C; }): any; } >x : any