=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/callSignatureAssignabilityInInheritance5.ts === // checking subtype relations for function types as it relates to contextual signature instantiation // same as subtypingWithCallSignatures2 just with an extra level of indirection in the inheritance chain class Base { foo: string; } >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance5.ts, 0, 0)) >foo : string, Symbol(foo, Decl(callSignatureAssignabilityInInheritance5.ts, 3, 12)) class Derived extends Base { bar: string; } >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance5.ts, 3, 27)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance5.ts, 0, 0)) >bar : string, Symbol(bar, Decl(callSignatureAssignabilityInInheritance5.ts, 4, 28)) class Derived2 extends Derived { baz: string; } >Derived2 : Derived2, Symbol(Derived2, Decl(callSignatureAssignabilityInInheritance5.ts, 4, 43)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance5.ts, 3, 27)) >baz : string, Symbol(baz, Decl(callSignatureAssignabilityInInheritance5.ts, 5, 32)) class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived, Symbol(OtherDerived, Decl(callSignatureAssignabilityInInheritance5.ts, 5, 47)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance5.ts, 0, 0)) >bing : string, Symbol(bing, Decl(callSignatureAssignabilityInInheritance5.ts, 6, 33)) interface A { // T >A : A, Symbol(A, Decl(callSignatureAssignabilityInInheritance5.ts, 6, 49)) // M's a: (x: number) => number[]; >a : (x: number) => number[], Symbol(a, Decl(callSignatureAssignabilityInInheritance5.ts, 8, 13)) >x : number, Symbol(x, Decl(callSignatureAssignabilityInInheritance5.ts, 10, 8)) a2: (x: number) => string[]; >a2 : (x: number) => string[], Symbol(a2, Decl(callSignatureAssignabilityInInheritance5.ts, 10, 31)) >x : number, Symbol(x, Decl(callSignatureAssignabilityInInheritance5.ts, 11, 9)) a3: (x: number) => void; >a3 : (x: number) => void, Symbol(a3, Decl(callSignatureAssignabilityInInheritance5.ts, 11, 32)) >x : number, Symbol(x, Decl(callSignatureAssignabilityInInheritance5.ts, 12, 9)) a4: (x: string, y: number) => string; >a4 : (x: string, y: number) => string, Symbol(a4, Decl(callSignatureAssignabilityInInheritance5.ts, 12, 28)) >x : string, Symbol(x, Decl(callSignatureAssignabilityInInheritance5.ts, 13, 9)) >y : number, Symbol(y, Decl(callSignatureAssignabilityInInheritance5.ts, 13, 19)) a5: (x: (arg: string) => number) => string; >a5 : (x: (arg: string) => number) => string, Symbol(a5, Decl(callSignatureAssignabilityInInheritance5.ts, 13, 41)) >x : (arg: string) => number, Symbol(x, Decl(callSignatureAssignabilityInInheritance5.ts, 14, 9)) >arg : string, Symbol(arg, Decl(callSignatureAssignabilityInInheritance5.ts, 14, 13)) a6: (x: (arg: Base) => Derived) => Base; >a6 : (x: (arg: Base) => Derived) => Base, Symbol(a6, Decl(callSignatureAssignabilityInInheritance5.ts, 14, 47)) >x : (arg: Base) => Derived, Symbol(x, Decl(callSignatureAssignabilityInInheritance5.ts, 15, 9)) >arg : Base, Symbol(arg, Decl(callSignatureAssignabilityInInheritance5.ts, 15, 13)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance5.ts, 0, 0)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance5.ts, 3, 27)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance5.ts, 0, 0)) a7: (x: (arg: Base) => Derived) => (r: Base) => Derived; >a7 : (x: (arg: Base) => Derived) => (r: Base) => Derived, Symbol(a7, Decl(callSignatureAssignabilityInInheritance5.ts, 15, 44)) >x : (arg: Base) => Derived, Symbol(x, Decl(callSignatureAssignabilityInInheritance5.ts, 16, 9)) >arg : Base, Symbol(arg, Decl(callSignatureAssignabilityInInheritance5.ts, 16, 13)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance5.ts, 0, 0)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance5.ts, 3, 27)) >r : Base, Symbol(r, Decl(callSignatureAssignabilityInInheritance5.ts, 16, 40)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance5.ts, 0, 0)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance5.ts, 3, 27)) a8: (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived; >a8 : (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived, Symbol(a8, Decl(callSignatureAssignabilityInInheritance5.ts, 16, 60)) >x : (arg: Base) => Derived, Symbol(x, Decl(callSignatureAssignabilityInInheritance5.ts, 17, 9)) >arg : Base, Symbol(arg, Decl(callSignatureAssignabilityInInheritance5.ts, 17, 13)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance5.ts, 0, 0)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance5.ts, 3, 27)) >y : (arg2: Base) => Derived, Symbol(y, Decl(callSignatureAssignabilityInInheritance5.ts, 17, 35)) >arg2 : Base, Symbol(arg2, Decl(callSignatureAssignabilityInInheritance5.ts, 17, 40)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance5.ts, 0, 0)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance5.ts, 3, 27)) >r : Base, Symbol(r, Decl(callSignatureAssignabilityInInheritance5.ts, 17, 68)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance5.ts, 0, 0)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance5.ts, 3, 27)) a9: (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived; >a9 : (x: (arg: Base) => Derived, y: (arg2: Base) => Derived) => (r: Base) => Derived, Symbol(a9, Decl(callSignatureAssignabilityInInheritance5.ts, 17, 88)) >x : (arg: Base) => Derived, Symbol(x, Decl(callSignatureAssignabilityInInheritance5.ts, 18, 9)) >arg : Base, Symbol(arg, Decl(callSignatureAssignabilityInInheritance5.ts, 18, 13)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance5.ts, 0, 0)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance5.ts, 3, 27)) >y : (arg2: Base) => Derived, Symbol(y, Decl(callSignatureAssignabilityInInheritance5.ts, 18, 35)) >arg2 : Base, Symbol(arg2, Decl(callSignatureAssignabilityInInheritance5.ts, 18, 40)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance5.ts, 0, 0)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance5.ts, 3, 27)) >r : Base, Symbol(r, Decl(callSignatureAssignabilityInInheritance5.ts, 18, 68)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance5.ts, 0, 0)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance5.ts, 3, 27)) a10: (...x: Derived[]) => Derived; >a10 : (...x: Derived[]) => Derived, Symbol(a10, Decl(callSignatureAssignabilityInInheritance5.ts, 18, 88)) >x : Derived[], Symbol(x, Decl(callSignatureAssignabilityInInheritance5.ts, 19, 10)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance5.ts, 3, 27)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance5.ts, 3, 27)) a11: (x: { foo: string }, y: { foo: string; bar: string }) => Base; >a11 : (x: { foo: string; }, y: { foo: string; bar: string; }) => Base, Symbol(a11, Decl(callSignatureAssignabilityInInheritance5.ts, 19, 38)) >x : { foo: string; }, Symbol(x, Decl(callSignatureAssignabilityInInheritance5.ts, 20, 10)) >foo : string, Symbol(foo, Decl(callSignatureAssignabilityInInheritance5.ts, 20, 14)) >y : { foo: string; bar: string; }, Symbol(y, Decl(callSignatureAssignabilityInInheritance5.ts, 20, 29)) >foo : string, Symbol(foo, Decl(callSignatureAssignabilityInInheritance5.ts, 20, 34)) >bar : string, Symbol(bar, Decl(callSignatureAssignabilityInInheritance5.ts, 20, 47)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance5.ts, 0, 0)) a12: (x: Array, y: Array) => Array; >a12 : (x: Base[], y: Derived2[]) => Derived[], Symbol(a12, Decl(callSignatureAssignabilityInInheritance5.ts, 20, 71)) >x : Base[], Symbol(x, Decl(callSignatureAssignabilityInInheritance5.ts, 21, 10)) >Array : T[], Symbol(Array, Decl(lib.d.ts, 1000, 23), Decl(lib.d.ts, 1171, 11)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance5.ts, 0, 0)) >y : Derived2[], Symbol(y, Decl(callSignatureAssignabilityInInheritance5.ts, 21, 25)) >Array : T[], Symbol(Array, Decl(lib.d.ts, 1000, 23), Decl(lib.d.ts, 1171, 11)) >Derived2 : Derived2, Symbol(Derived2, Decl(callSignatureAssignabilityInInheritance5.ts, 4, 43)) >Array : T[], Symbol(Array, Decl(lib.d.ts, 1000, 23), Decl(lib.d.ts, 1171, 11)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance5.ts, 3, 27)) a13: (x: Array, y: Array) => Array; >a13 : (x: Base[], y: Derived[]) => Derived[], Symbol(a13, Decl(callSignatureAssignabilityInInheritance5.ts, 21, 64)) >x : Base[], Symbol(x, Decl(callSignatureAssignabilityInInheritance5.ts, 22, 10)) >Array : T[], Symbol(Array, Decl(lib.d.ts, 1000, 23), Decl(lib.d.ts, 1171, 11)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance5.ts, 0, 0)) >y : Derived[], Symbol(y, Decl(callSignatureAssignabilityInInheritance5.ts, 22, 25)) >Array : T[], Symbol(Array, Decl(lib.d.ts, 1000, 23), Decl(lib.d.ts, 1171, 11)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance5.ts, 3, 27)) >Array : T[], Symbol(Array, Decl(lib.d.ts, 1000, 23), Decl(lib.d.ts, 1171, 11)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance5.ts, 3, 27)) a14: (x: { a: string; b: number }) => Object; >a14 : (x: { a: string; b: number; }) => Object, Symbol(a14, Decl(callSignatureAssignabilityInInheritance5.ts, 22, 63)) >x : { a: string; b: number; }, Symbol(x, Decl(callSignatureAssignabilityInInheritance5.ts, 23, 10)) >a : string, Symbol(a, Decl(callSignatureAssignabilityInInheritance5.ts, 23, 14)) >b : number, Symbol(b, Decl(callSignatureAssignabilityInInheritance5.ts, 23, 25)) >Object : Object, Symbol(Object, Decl(lib.d.ts, 92, 1), Decl(lib.d.ts, 223, 11)) } interface B extends A { >B : B, Symbol(B, Decl(callSignatureAssignabilityInInheritance5.ts, 24, 1)) >A : A, Symbol(A, Decl(callSignatureAssignabilityInInheritance5.ts, 6, 49)) a: (x: T) => T[]; >a : (x: T) => T[], Symbol(a, Decl(callSignatureAssignabilityInInheritance5.ts, 26, 23)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 27, 8)) >x : T, Symbol(x, Decl(callSignatureAssignabilityInInheritance5.ts, 27, 11)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 27, 8)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 27, 8)) } // S's interface I extends B { >I : I, Symbol(I, Decl(callSignatureAssignabilityInInheritance5.ts, 28, 1)) >B : B, Symbol(B, Decl(callSignatureAssignabilityInInheritance5.ts, 24, 1)) // N's a: (x: T) => T[]; // ok, instantiation of N is a subtype of M, T is number >a : (x: T) => T[], Symbol(a, Decl(callSignatureAssignabilityInInheritance5.ts, 31, 23)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 33, 8)) >x : T, Symbol(x, Decl(callSignatureAssignabilityInInheritance5.ts, 33, 11)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 33, 8)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 33, 8)) a2: (x: T) => string[]; // ok >a2 : (x: T) => string[], Symbol(a2, Decl(callSignatureAssignabilityInInheritance5.ts, 33, 24)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 34, 9)) >x : T, Symbol(x, Decl(callSignatureAssignabilityInInheritance5.ts, 34, 12)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 34, 9)) a3: (x: T) => T; // ok since Base returns void >a3 : (x: T) => T, Symbol(a3, Decl(callSignatureAssignabilityInInheritance5.ts, 34, 30)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 35, 9)) >x : T, Symbol(x, Decl(callSignatureAssignabilityInInheritance5.ts, 35, 12)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 35, 9)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 35, 9)) a4: (x: T, y: U) => T; // ok, instantiation of N is a subtype of M, T is string, U is number >a4 : (x: T, y: U) => T, Symbol(a4, Decl(callSignatureAssignabilityInInheritance5.ts, 35, 23)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 36, 9)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance5.ts, 36, 11)) >x : T, Symbol(x, Decl(callSignatureAssignabilityInInheritance5.ts, 36, 15)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 36, 9)) >y : U, Symbol(y, Decl(callSignatureAssignabilityInInheritance5.ts, 36, 20)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance5.ts, 36, 11)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 36, 9)) a5: (x: (arg: T) => U) => T; // ok, U is in a parameter position so inferences can be made >a5 : (x: (arg: T) => U) => T, Symbol(a5, Decl(callSignatureAssignabilityInInheritance5.ts, 36, 32)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 37, 9)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance5.ts, 37, 11)) >x : (arg: T) => U, Symbol(x, Decl(callSignatureAssignabilityInInheritance5.ts, 37, 15)) >arg : T, Symbol(arg, Decl(callSignatureAssignabilityInInheritance5.ts, 37, 19)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 37, 9)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance5.ts, 37, 11)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 37, 9)) a6: (x: (arg: T) => U) => T; // ok, same as a5 but with object type hierarchy >a6 : (x: (arg: T) => U) => T, Symbol(a6, Decl(callSignatureAssignabilityInInheritance5.ts, 37, 38)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 38, 9)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance5.ts, 0, 0)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance5.ts, 38, 24)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance5.ts, 3, 27)) >x : (arg: T) => U, Symbol(x, Decl(callSignatureAssignabilityInInheritance5.ts, 38, 44)) >arg : T, Symbol(arg, Decl(callSignatureAssignabilityInInheritance5.ts, 38, 48)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 38, 9)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance5.ts, 38, 24)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 38, 9)) a7: (x: (arg: T) => U) => (r: T) => U; // ok >a7 : (x: (arg: T) => U) => (r: T) => U, Symbol(a7, Decl(callSignatureAssignabilityInInheritance5.ts, 38, 67)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 39, 9)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance5.ts, 0, 0)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance5.ts, 39, 24)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance5.ts, 3, 27)) >x : (arg: T) => U, Symbol(x, Decl(callSignatureAssignabilityInInheritance5.ts, 39, 44)) >arg : T, Symbol(arg, Decl(callSignatureAssignabilityInInheritance5.ts, 39, 48)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 39, 9)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance5.ts, 39, 24)) >r : T, Symbol(r, Decl(callSignatureAssignabilityInInheritance5.ts, 39, 66)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 39, 9)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance5.ts, 39, 24)) a8: (x: (arg: T) => U, y: (arg2: T) => U) => (r: T) => U; // ok >a8 : (x: (arg: T) => U, y: (arg2: T) => U) => (r: T) => U, Symbol(a8, Decl(callSignatureAssignabilityInInheritance5.ts, 39, 77)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 40, 9)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance5.ts, 0, 0)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance5.ts, 40, 24)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance5.ts, 3, 27)) >x : (arg: T) => U, Symbol(x, Decl(callSignatureAssignabilityInInheritance5.ts, 40, 44)) >arg : T, Symbol(arg, Decl(callSignatureAssignabilityInInheritance5.ts, 40, 48)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 40, 9)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance5.ts, 40, 24)) >y : (arg2: T) => U, Symbol(y, Decl(callSignatureAssignabilityInInheritance5.ts, 40, 61)) >arg2 : T, Symbol(arg2, Decl(callSignatureAssignabilityInInheritance5.ts, 40, 66)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 40, 9)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance5.ts, 40, 24)) >r : T, Symbol(r, Decl(callSignatureAssignabilityInInheritance5.ts, 40, 85)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 40, 9)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance5.ts, 40, 24)) a9: (x: (arg: T) => U, y: (arg2: { foo: string; bing: number }) => U) => (r: T) => U; // ok, same as a8 with compatible object literal >a9 : (x: (arg: T) => U, y: (arg2: { foo: string; bing: number; }) => U) => (r: T) => U, Symbol(a9, Decl(callSignatureAssignabilityInInheritance5.ts, 40, 96)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 41, 9)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance5.ts, 0, 0)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance5.ts, 41, 24)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance5.ts, 3, 27)) >x : (arg: T) => U, Symbol(x, Decl(callSignatureAssignabilityInInheritance5.ts, 41, 44)) >arg : T, Symbol(arg, Decl(callSignatureAssignabilityInInheritance5.ts, 41, 48)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 41, 9)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance5.ts, 41, 24)) >y : (arg2: { foo: string; bing: number; }) => U, Symbol(y, Decl(callSignatureAssignabilityInInheritance5.ts, 41, 61)) >arg2 : { foo: string; bing: number; }, Symbol(arg2, Decl(callSignatureAssignabilityInInheritance5.ts, 41, 66)) >foo : string, Symbol(foo, Decl(callSignatureAssignabilityInInheritance5.ts, 41, 73)) >bing : number, Symbol(bing, Decl(callSignatureAssignabilityInInheritance5.ts, 41, 86)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance5.ts, 41, 24)) >r : T, Symbol(r, Decl(callSignatureAssignabilityInInheritance5.ts, 41, 113)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 41, 9)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance5.ts, 41, 24)) a10: (...x: T[]) => T; // ok >a10 : (...x: T[]) => T, Symbol(a10, Decl(callSignatureAssignabilityInInheritance5.ts, 41, 124)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 42, 10)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance5.ts, 3, 27)) >x : T[], Symbol(x, Decl(callSignatureAssignabilityInInheritance5.ts, 42, 29)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 42, 10)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 42, 10)) a11: (x: T, y: T) => T; // ok >a11 : (x: T, y: T) => T, Symbol(a11, Decl(callSignatureAssignabilityInInheritance5.ts, 42, 45)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 43, 10)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance5.ts, 0, 0)) >x : T, Symbol(x, Decl(callSignatureAssignabilityInInheritance5.ts, 43, 26)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 43, 10)) >y : T, Symbol(y, Decl(callSignatureAssignabilityInInheritance5.ts, 43, 31)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 43, 10)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 43, 10)) a12: >(x: Array, y: T) => Array; // ok, less specific parameter type >a12 : (x: Base[], y: T) => Derived[], Symbol(a12, Decl(callSignatureAssignabilityInInheritance5.ts, 43, 43)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 44, 10)) >Array : T[], Symbol(Array, Decl(lib.d.ts, 1000, 23), Decl(lib.d.ts, 1171, 11)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance5.ts, 0, 0)) >x : Base[], Symbol(x, Decl(callSignatureAssignabilityInInheritance5.ts, 44, 33)) >Array : T[], Symbol(Array, Decl(lib.d.ts, 1000, 23), Decl(lib.d.ts, 1171, 11)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance5.ts, 0, 0)) >y : T, Symbol(y, Decl(callSignatureAssignabilityInInheritance5.ts, 44, 48)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 44, 10)) >Array : T[], Symbol(Array, Decl(lib.d.ts, 1000, 23), Decl(lib.d.ts, 1171, 11)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance5.ts, 3, 27)) a13: >(x: Array, y: T) => T; // ok, T = Array, satisfies constraint, contextual signature instantiation succeeds >a13 : (x: Base[], y: T) => T, Symbol(a13, Decl(callSignatureAssignabilityInInheritance5.ts, 44, 73)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 45, 10)) >Array : T[], Symbol(Array, Decl(lib.d.ts, 1000, 23), Decl(lib.d.ts, 1171, 11)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance5.ts, 3, 27)) >x : Base[], Symbol(x, Decl(callSignatureAssignabilityInInheritance5.ts, 45, 36)) >Array : T[], Symbol(Array, Decl(lib.d.ts, 1000, 23), Decl(lib.d.ts, 1171, 11)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance5.ts, 0, 0)) >y : T, Symbol(y, Decl(callSignatureAssignabilityInInheritance5.ts, 45, 51)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 45, 10)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 45, 10)) a14: (x: { a: T; b: T }) => T; // ok, best common type yields T = {} but that's satisfactory for this signature >a14 : (x: { a: T; b: T; }) => T, Symbol(a14, Decl(callSignatureAssignabilityInInheritance5.ts, 45, 63)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 46, 10)) >x : { a: T; b: T; }, Symbol(x, Decl(callSignatureAssignabilityInInheritance5.ts, 46, 13)) >a : T, Symbol(a, Decl(callSignatureAssignabilityInInheritance5.ts, 46, 17)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 46, 10)) >b : T, Symbol(b, Decl(callSignatureAssignabilityInInheritance5.ts, 46, 23)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 46, 10)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance5.ts, 46, 10)) }