=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/constructSignatureAssignabilityInInheritance6.ts === // checking subtype relations for function types as it relates to contextual signature instantiation // same as subtypingWithConstructSignatures4 but using class type parameters instead of generic signatures // all are errors class Base { foo: string; } >Base : Base >foo : string class Derived extends Base { bar: string; } >Derived : Derived >Base : Base >bar : string class Derived2 extends Derived { baz: string; } >Derived2 : Derived2 >Derived : Derived >baz : string class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived >Base : Base >bing : string interface A { // T >A : A // M's a: new (x: T) => T[]; >a : new (x: T) => T[] >T : T >x : T >T : T >T : T a2: new (x: T) => string[]; >a2 : new (x: T) => string[] >T : T >x : T >T : T a3: new (x: T) => void; >a3 : new (x: T) => void >T : T >x : T >T : T a4: new (x: T, y: U) => string; >a4 : new (x: T, y: U) => string >T : T >U : U >x : T >T : T >y : U >U : U a5: new (x: (arg: T) => U) => T; >a5 : new (x: (arg: T) => U) => T >T : T >U : U >x : (arg: T) => U >arg : T >T : T >U : U >T : T a6: new (x: (arg: T) => Derived) => T; >a6 : new (x: (arg: T) => Derived) => T >T : T >Base : Base >x : (arg: T) => Derived >arg : T >T : T >Derived : Derived >T : T a11: new (x: { foo: T }, y: { foo: T; bar: T }) => Base; >a11 : new (x: { foo: T; }, y: { foo: T; bar: T; }) => Base >T : T >x : { foo: T; } >foo : T >T : T >y : { foo: T; bar: T; } >foo : T >T : T >bar : T >T : T >Base : Base a15: new (x: { a: T; b: T }) => T[]; >a15 : new (x: { a: T; b: T; }) => T[] >T : T >x : { a: T; b: T; } >a : T >T : T >b : T >T : T >T : T a16: new (x: { a: T; b: T }) => T[]; >a16 : new (x: { a: T; b: T; }) => T[] >T : T >Base : Base >x : { a: T; b: T; } >a : T >T : T >b : T >T : T >T : T } // S's interface I extends A { >I : I >T : T >A : A a: new (x: T) => T[]; >a : new (x: T) => T[] >x : T >T : T >T : T } interface I2 extends A { >I2 : I2 >T : T >A : A a2: new (x: T) => string[]; >a2 : new (x: T) => string[] >x : T >T : T } interface I3 extends A { >I3 : I3 >T : T >A : A a3: new (x: T) => T; >a3 : new (x: T) => T >x : T >T : T >T : T } interface I4 extends A { >I4 : I4 >T : T >A : A a4: new (x: T, y: U) => string; >a4 : new (x: T, y: U) => string >U : U >x : T >T : T >y : U >U : U } interface I5 extends A { >I5 : I5 >T : T >A : A a5: new (x: (arg: T) => U) => T; >a5 : new (x: (arg: T) => U) => T >U : U >x : (arg: T) => U >arg : T >T : T >U : U >T : T } interface I7 extends A { >I7 : I7 >T : T >A : A a11: new (x: { foo: T }, y: { foo: U; bar: U }) => Base; >a11 : new (x: { foo: T; }, y: { foo: U; bar: U; }) => Base >U : U >x : { foo: T; } >foo : T >T : T >y : { foo: U; bar: U; } >foo : U >U : U >bar : U >U : U >Base : Base } interface I9 extends A { >I9 : I9 >T : T >A : A a16: new (x: { a: T; b: T }) => T[]; >a16 : new (x: { a: T; b: T; }) => T[] >x : { a: T; b: T; } >a : T >T : T >b : T >T : T >T : T }