=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/assignmentCompatWithCallSignatures6.ts === // checking assignment compatibility relations for function types. All valid 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 { >A : A a: (x: T) => T[]; >a : (x: T) => T[] >T : T >x : T >T : T >T : T a2: (x: T) => string[]; >a2 : (x: T) => string[] >T : T >x : T >T : T a3: (x: T) => void; >a3 : (x: T) => void >T : T >x : T >T : T a4: (x: T, y: U) => string; >a4 : (x: T, y: U) => string >T : T >U : U >x : T >T : T >y : U >U : U a5: (x: (arg: T) => U) => T; >a5 : (x: (arg: T) => U) => T >T : T >U : U >x : (arg: T) => U >arg : T >T : T >U : U >T : T a6: (x: (arg: T) => Derived) => T; >a6 : (x: (arg: T) => Derived) => T >T : T >Base : Base >x : (arg: T) => Derived >arg : T >T : T >Derived : Derived >T : T a11: (x: { foo: T }, y: { foo: T; bar: T }) => Base; >a11 : (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: (x: { a: T; b: T }) => T[]; >a15 : (x: { a: T; b: T; }) => T[] >T : T >x : { a: T; b: T; } >a : T >T : T >b : T >T : T >T : T a16: (x: { a: T; b: T }) => T[]; >a16 : (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 } var x: A; >x : A >A : A var b: (x: T) => T[]; >b : (x: T) => T[] >T : T >x : T >T : T >T : T x.a = b; >x.a = b : (x: T) => T[] >x.a : (x: T) => T[] >x : A >a : (x: T) => T[] >b : (x: T) => T[] b = x.a; >b = x.a : (x: T) => T[] >b : (x: T) => T[] >x.a : (x: T) => T[] >x : A >a : (x: T) => T[] var b2: (x: T) => string[]; >b2 : (x: T) => string[] >T : T >x : T >T : T x.a2 = b2; >x.a2 = b2 : (x: T) => string[] >x.a2 : (x: T) => string[] >x : A >a2 : (x: T) => string[] >b2 : (x: T) => string[] b2 = x.a2; >b2 = x.a2 : (x: T) => string[] >b2 : (x: T) => string[] >x.a2 : (x: T) => string[] >x : A >a2 : (x: T) => string[] var b3: (x: T) => T; >b3 : (x: T) => T >T : T >x : T >T : T >T : T x.a3 = b3; >x.a3 = b3 : (x: T) => T >x.a3 : (x: T) => void >x : A >a3 : (x: T) => void >b3 : (x: T) => T b3 = x.a3; >b3 = x.a3 : (x: T) => void >b3 : (x: T) => T >x.a3 : (x: T) => void >x : A >a3 : (x: T) => void var b4: (x: T, y: U) => string; >b4 : (x: T, y: U) => string >T : T >U : U >x : T >T : T >y : U >U : U x.a4 = b4; >x.a4 = b4 : (x: T, y: U) => string >x.a4 : (x: T, y: U) => string >x : A >a4 : (x: T, y: U) => string >b4 : (x: T, y: U) => string b4 = x.a4; >b4 = x.a4 : (x: T, y: U) => string >b4 : (x: T, y: U) => string >x.a4 : (x: T, y: U) => string >x : A >a4 : (x: T, y: U) => string var b5: (x: (arg: T) => U) => T; >b5 : (x: (arg: T) => U) => T >T : T >U : U >x : (arg: T) => U >arg : T >T : T >U : U >T : T x.a5 = b5; >x.a5 = b5 : (x: (arg: T) => U) => T >x.a5 : (x: (arg: T) => U) => T >x : A >a5 : (x: (arg: T) => U) => T >b5 : (x: (arg: T) => U) => T b5 = x.a5; >b5 = x.a5 : (x: (arg: T) => U) => T >b5 : (x: (arg: T) => U) => T >x.a5 : (x: (arg: T) => U) => T >x : A >a5 : (x: (arg: T) => U) => T var b11: (x: { foo: T }, y: { foo: U; bar: U }) => Base; >b11 : (x: { foo: T; }, y: { foo: U; bar: U; }) => Base >T : T >U : U >x : { foo: T; } >foo : T >T : T >y : { foo: U; bar: U; } >foo : U >U : U >bar : U >U : U >Base : Base x.a11 = b11; >x.a11 = b11 : (x: { foo: T; }, y: { foo: U; bar: U; }) => Base >x.a11 : (x: { foo: T; }, y: { foo: T; bar: T; }) => Base >x : A >a11 : (x: { foo: T; }, y: { foo: T; bar: T; }) => Base >b11 : (x: { foo: T; }, y: { foo: U; bar: U; }) => Base b11 = x.a11; >b11 = x.a11 : (x: { foo: T; }, y: { foo: T; bar: T; }) => Base >b11 : (x: { foo: T; }, y: { foo: U; bar: U; }) => Base >x.a11 : (x: { foo: T; }, y: { foo: T; bar: T; }) => Base >x : A >a11 : (x: { foo: T; }, y: { foo: T; bar: T; }) => Base var b16: (x: { a: T; b: T }) => T[]; >b16 : (x: { a: T; b: T; }) => T[] >T : T >x : { a: T; b: T; } >a : T >T : T >b : T >T : T >T : T x.a16 = b16; >x.a16 = b16 : (x: { a: T; b: T; }) => T[] >x.a16 : (x: { a: T; b: T; }) => T[] >x : A >a16 : (x: { a: T; b: T; }) => T[] >b16 : (x: { a: T; b: T; }) => T[] b16 = x.a16; >b16 = x.a16 : (x: { a: T; b: T; }) => T[] >b16 : (x: { a: T; b: T; }) => T[] >x.a16 : (x: { a: T; b: T; }) => T[] >x : A >a16 : (x: { a: T; b: T; }) => T[]