=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/callSignatureAssignabilityInInheritance2.ts === // checking subtype relations for function types as it relates to contextual signature instantiation class Base { foo: string; } >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance2.ts, 0, 0)) >foo : string, Symbol(foo, Decl(callSignatureAssignabilityInInheritance2.ts, 2, 12)) class Derived extends Base { bar: string; } >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance2.ts, 2, 27)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance2.ts, 0, 0)) >bar : string, Symbol(bar, Decl(callSignatureAssignabilityInInheritance2.ts, 3, 28)) class Derived2 extends Derived { baz: string; } >Derived2 : Derived2, Symbol(Derived2, Decl(callSignatureAssignabilityInInheritance2.ts, 3, 43)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance2.ts, 2, 27)) >baz : string, Symbol(baz, Decl(callSignatureAssignabilityInInheritance2.ts, 4, 32)) class OtherDerived extends Base { bing: string; } >OtherDerived : OtherDerived, Symbol(OtherDerived, Decl(callSignatureAssignabilityInInheritance2.ts, 4, 47)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance2.ts, 0, 0)) >bing : string, Symbol(bing, Decl(callSignatureAssignabilityInInheritance2.ts, 5, 33)) interface A { // T >A : A, Symbol(A, Decl(callSignatureAssignabilityInInheritance2.ts, 5, 49)) // M's a: (x: number) => number[]; >a : (x: number) => number[], Symbol(a, Decl(callSignatureAssignabilityInInheritance2.ts, 7, 13)) >x : number, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 9, 8)) a2: (x: number) => string[]; >a2 : (x: number) => string[], Symbol(a2, Decl(callSignatureAssignabilityInInheritance2.ts, 9, 31)) >x : number, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 10, 9)) a3: (x: number) => void; >a3 : (x: number) => void, Symbol(a3, Decl(callSignatureAssignabilityInInheritance2.ts, 10, 32)) >x : number, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 11, 9)) a4: (x: string, y: number) => string; >a4 : (x: string, y: number) => string, Symbol(a4, Decl(callSignatureAssignabilityInInheritance2.ts, 11, 28)) >x : string, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 12, 9)) >y : number, Symbol(y, Decl(callSignatureAssignabilityInInheritance2.ts, 12, 19)) a5: (x: (arg: string) => number) => string; >a5 : (x: (arg: string) => number) => string, Symbol(a5, Decl(callSignatureAssignabilityInInheritance2.ts, 12, 41)) >x : (arg: string) => number, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 13, 9)) >arg : string, Symbol(arg, Decl(callSignatureAssignabilityInInheritance2.ts, 13, 13)) a6: (x: (arg: Base) => Derived) => Base; >a6 : (x: (arg: Base) => Derived) => Base, Symbol(a6, Decl(callSignatureAssignabilityInInheritance2.ts, 13, 47)) >x : (arg: Base) => Derived, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 14, 9)) >arg : Base, Symbol(arg, Decl(callSignatureAssignabilityInInheritance2.ts, 14, 13)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance2.ts, 0, 0)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance2.ts, 2, 27)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance2.ts, 0, 0)) a7: (x: (arg: Base) => Derived) => (r: Base) => Derived; >a7 : (x: (arg: Base) => Derived) => (r: Base) => Derived, Symbol(a7, Decl(callSignatureAssignabilityInInheritance2.ts, 14, 44)) >x : (arg: Base) => Derived, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 15, 9)) >arg : Base, Symbol(arg, Decl(callSignatureAssignabilityInInheritance2.ts, 15, 13)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance2.ts, 0, 0)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance2.ts, 2, 27)) >r : Base, Symbol(r, Decl(callSignatureAssignabilityInInheritance2.ts, 15, 40)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance2.ts, 0, 0)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance2.ts, 2, 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(callSignatureAssignabilityInInheritance2.ts, 15, 60)) >x : (arg: Base) => Derived, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 16, 9)) >arg : Base, Symbol(arg, Decl(callSignatureAssignabilityInInheritance2.ts, 16, 13)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance2.ts, 0, 0)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance2.ts, 2, 27)) >y : (arg2: Base) => Derived, Symbol(y, Decl(callSignatureAssignabilityInInheritance2.ts, 16, 35)) >arg2 : Base, Symbol(arg2, Decl(callSignatureAssignabilityInInheritance2.ts, 16, 40)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance2.ts, 0, 0)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance2.ts, 2, 27)) >r : Base, Symbol(r, Decl(callSignatureAssignabilityInInheritance2.ts, 16, 68)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance2.ts, 0, 0)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance2.ts, 2, 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(callSignatureAssignabilityInInheritance2.ts, 16, 88)) >x : (arg: Base) => Derived, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 17, 9)) >arg : Base, Symbol(arg, Decl(callSignatureAssignabilityInInheritance2.ts, 17, 13)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance2.ts, 0, 0)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance2.ts, 2, 27)) >y : (arg2: Base) => Derived, Symbol(y, Decl(callSignatureAssignabilityInInheritance2.ts, 17, 35)) >arg2 : Base, Symbol(arg2, Decl(callSignatureAssignabilityInInheritance2.ts, 17, 40)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance2.ts, 0, 0)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance2.ts, 2, 27)) >r : Base, Symbol(r, Decl(callSignatureAssignabilityInInheritance2.ts, 17, 68)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance2.ts, 0, 0)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance2.ts, 2, 27)) a10: (...x: Derived[]) => Derived; >a10 : (...x: Derived[]) => Derived, Symbol(a10, Decl(callSignatureAssignabilityInInheritance2.ts, 17, 88)) >x : Derived[], Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 18, 10)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance2.ts, 2, 27)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance2.ts, 2, 27)) a11: (x: { foo: string }, y: { foo: string; bar: string }) => Base; >a11 : (x: { foo: string; }, y: { foo: string; bar: string; }) => Base, Symbol(a11, Decl(callSignatureAssignabilityInInheritance2.ts, 18, 38)) >x : { foo: string; }, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 19, 10)) >foo : string, Symbol(foo, Decl(callSignatureAssignabilityInInheritance2.ts, 19, 14)) >y : { foo: string; bar: string; }, Symbol(y, Decl(callSignatureAssignabilityInInheritance2.ts, 19, 29)) >foo : string, Symbol(foo, Decl(callSignatureAssignabilityInInheritance2.ts, 19, 34)) >bar : string, Symbol(bar, Decl(callSignatureAssignabilityInInheritance2.ts, 19, 47)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance2.ts, 0, 0)) a12: (x: Array, y: Array) => Array; >a12 : (x: Base[], y: Derived2[]) => Derived[], Symbol(a12, Decl(callSignatureAssignabilityInInheritance2.ts, 19, 71)) >x : Base[], Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 20, 10)) >Array : T[], Symbol(Array, Decl(lib.d.ts, 1000, 23), Decl(lib.d.ts, 1171, 11)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance2.ts, 0, 0)) >y : Derived2[], Symbol(y, Decl(callSignatureAssignabilityInInheritance2.ts, 20, 25)) >Array : T[], Symbol(Array, Decl(lib.d.ts, 1000, 23), Decl(lib.d.ts, 1171, 11)) >Derived2 : Derived2, Symbol(Derived2, Decl(callSignatureAssignabilityInInheritance2.ts, 3, 43)) >Array : T[], Symbol(Array, Decl(lib.d.ts, 1000, 23), Decl(lib.d.ts, 1171, 11)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance2.ts, 2, 27)) a13: (x: Array, y: Array) => Array; >a13 : (x: Base[], y: Derived[]) => Derived[], Symbol(a13, Decl(callSignatureAssignabilityInInheritance2.ts, 20, 64)) >x : Base[], Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 21, 10)) >Array : T[], Symbol(Array, Decl(lib.d.ts, 1000, 23), Decl(lib.d.ts, 1171, 11)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance2.ts, 0, 0)) >y : Derived[], Symbol(y, Decl(callSignatureAssignabilityInInheritance2.ts, 21, 25)) >Array : T[], Symbol(Array, Decl(lib.d.ts, 1000, 23), Decl(lib.d.ts, 1171, 11)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance2.ts, 2, 27)) >Array : T[], Symbol(Array, Decl(lib.d.ts, 1000, 23), Decl(lib.d.ts, 1171, 11)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance2.ts, 2, 27)) a14: (x: { a: string; b: number }) => Object; >a14 : (x: { a: string; b: number; }) => Object, Symbol(a14, Decl(callSignatureAssignabilityInInheritance2.ts, 21, 63)) >x : { a: string; b: number; }, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 22, 10)) >a : string, Symbol(a, Decl(callSignatureAssignabilityInInheritance2.ts, 22, 14)) >b : number, Symbol(b, Decl(callSignatureAssignabilityInInheritance2.ts, 22, 25)) >Object : Object, Symbol(Object, Decl(lib.d.ts, 92, 1), Decl(lib.d.ts, 223, 11)) a15: { >a15 : { (x: number): number[]; (x: string): string[]; }, Symbol(a15, Decl(callSignatureAssignabilityInInheritance2.ts, 22, 49)) (x: number): number[]; >x : number, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 24, 9)) (x: string): string[]; >x : string, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 25, 9)) }; a16: { >a16 : { (x: T): number[]; (x: U): number[]; }, Symbol(a16, Decl(callSignatureAssignabilityInInheritance2.ts, 26, 6)) (x: T): number[]; >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 28, 9)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance2.ts, 2, 27)) >x : T, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 28, 28)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 28, 9)) (x: U): number[]; >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance2.ts, 29, 9)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance2.ts, 0, 0)) >x : U, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 29, 25)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance2.ts, 29, 9)) }; a17: { >a17 : { (x: (a: number) => number): number[]; (x: (a: string) => string): string[]; }, Symbol(a17, Decl(callSignatureAssignabilityInInheritance2.ts, 30, 6)) (x: (a: number) => number): number[]; >x : (a: number) => number, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 32, 9)) >a : number, Symbol(a, Decl(callSignatureAssignabilityInInheritance2.ts, 32, 13)) (x: (a: string) => string): string[]; >x : (a: string) => string, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 33, 9)) >a : string, Symbol(a, Decl(callSignatureAssignabilityInInheritance2.ts, 33, 13)) }; a18: { >a18 : { (x: { (a: number): number; (a: string): string; }): any[]; (x: { (a: boolean): boolean; (a: Date): Date; }): any[]; }, Symbol(a18, Decl(callSignatureAssignabilityInInheritance2.ts, 34, 6)) (x: { >x : { (a: number): number; (a: string): string; }, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 36, 9)) (a: number): number; >a : number, Symbol(a, Decl(callSignatureAssignabilityInInheritance2.ts, 37, 13)) (a: string): string; >a : string, Symbol(a, Decl(callSignatureAssignabilityInInheritance2.ts, 38, 13)) }): any[]; (x: { >x : { (a: boolean): boolean; (a: Date): Date; }, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 40, 9)) (a: boolean): boolean; >a : boolean, Symbol(a, Decl(callSignatureAssignabilityInInheritance2.ts, 41, 13)) (a: Date): Date; >a : Date, Symbol(a, Decl(callSignatureAssignabilityInInheritance2.ts, 42, 13)) >Date : Date, Symbol(Date, Decl(lib.d.ts, 633, 23), Decl(lib.d.ts, 815, 11)) >Date : Date, Symbol(Date, Decl(lib.d.ts, 633, 23), Decl(lib.d.ts, 815, 11)) }): any[]; }; } // S's interface I extends A { >I : I, Symbol(I, Decl(callSignatureAssignabilityInInheritance2.ts, 45, 1)) >A : A, Symbol(A, Decl(callSignatureAssignabilityInInheritance2.ts, 5, 49)) // 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(callSignatureAssignabilityInInheritance2.ts, 48, 23)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 50, 8)) >x : T, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 50, 11)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 50, 8)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 50, 8)) a2: (x: T) => string[]; // ok >a2 : (x: T) => string[], Symbol(a2, Decl(callSignatureAssignabilityInInheritance2.ts, 50, 24)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 51, 9)) >x : T, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 51, 12)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 51, 9)) a3: (x: T) => T; // ok since Base returns void >a3 : (x: T) => T, Symbol(a3, Decl(callSignatureAssignabilityInInheritance2.ts, 51, 30)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 52, 9)) >x : T, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 52, 12)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 52, 9)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 52, 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(callSignatureAssignabilityInInheritance2.ts, 52, 23)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 53, 9)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance2.ts, 53, 11)) >x : T, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 53, 15)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 53, 9)) >y : U, Symbol(y, Decl(callSignatureAssignabilityInInheritance2.ts, 53, 20)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance2.ts, 53, 11)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 53, 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(callSignatureAssignabilityInInheritance2.ts, 53, 32)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 54, 9)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance2.ts, 54, 11)) >x : (arg: T) => U, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 54, 15)) >arg : T, Symbol(arg, Decl(callSignatureAssignabilityInInheritance2.ts, 54, 19)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 54, 9)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance2.ts, 54, 11)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 54, 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(callSignatureAssignabilityInInheritance2.ts, 54, 38)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 55, 9)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance2.ts, 0, 0)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance2.ts, 55, 24)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance2.ts, 2, 27)) >x : (arg: T) => U, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 55, 44)) >arg : T, Symbol(arg, Decl(callSignatureAssignabilityInInheritance2.ts, 55, 48)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 55, 9)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance2.ts, 55, 24)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 55, 9)) a7: (x: (arg: T) => U) => (r: T) => U; // ok >a7 : (x: (arg: T) => U) => (r: T) => U, Symbol(a7, Decl(callSignatureAssignabilityInInheritance2.ts, 55, 67)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 56, 9)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance2.ts, 0, 0)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance2.ts, 56, 24)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance2.ts, 2, 27)) >x : (arg: T) => U, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 56, 44)) >arg : T, Symbol(arg, Decl(callSignatureAssignabilityInInheritance2.ts, 56, 48)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 56, 9)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance2.ts, 56, 24)) >r : T, Symbol(r, Decl(callSignatureAssignabilityInInheritance2.ts, 56, 66)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 56, 9)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance2.ts, 56, 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(callSignatureAssignabilityInInheritance2.ts, 56, 77)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 57, 9)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance2.ts, 0, 0)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance2.ts, 57, 24)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance2.ts, 2, 27)) >x : (arg: T) => U, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 57, 44)) >arg : T, Symbol(arg, Decl(callSignatureAssignabilityInInheritance2.ts, 57, 48)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 57, 9)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance2.ts, 57, 24)) >y : (arg2: T) => U, Symbol(y, Decl(callSignatureAssignabilityInInheritance2.ts, 57, 61)) >arg2 : T, Symbol(arg2, Decl(callSignatureAssignabilityInInheritance2.ts, 57, 66)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 57, 9)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance2.ts, 57, 24)) >r : T, Symbol(r, Decl(callSignatureAssignabilityInInheritance2.ts, 57, 85)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 57, 9)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance2.ts, 57, 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(callSignatureAssignabilityInInheritance2.ts, 57, 96)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 58, 9)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance2.ts, 0, 0)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance2.ts, 58, 24)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance2.ts, 2, 27)) >x : (arg: T) => U, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 58, 44)) >arg : T, Symbol(arg, Decl(callSignatureAssignabilityInInheritance2.ts, 58, 48)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 58, 9)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance2.ts, 58, 24)) >y : (arg2: { foo: string; bing: number; }) => U, Symbol(y, Decl(callSignatureAssignabilityInInheritance2.ts, 58, 61)) >arg2 : { foo: string; bing: number; }, Symbol(arg2, Decl(callSignatureAssignabilityInInheritance2.ts, 58, 66)) >foo : string, Symbol(foo, Decl(callSignatureAssignabilityInInheritance2.ts, 58, 73)) >bing : number, Symbol(bing, Decl(callSignatureAssignabilityInInheritance2.ts, 58, 86)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance2.ts, 58, 24)) >r : T, Symbol(r, Decl(callSignatureAssignabilityInInheritance2.ts, 58, 113)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 58, 9)) >U : U, Symbol(U, Decl(callSignatureAssignabilityInInheritance2.ts, 58, 24)) a10: (...x: T[]) => T; // ok >a10 : (...x: T[]) => T, Symbol(a10, Decl(callSignatureAssignabilityInInheritance2.ts, 58, 124)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 59, 10)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance2.ts, 2, 27)) >x : T[], Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 59, 29)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 59, 10)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 59, 10)) a11: (x: T, y: T) => T; // ok >a11 : (x: T, y: T) => T, Symbol(a11, Decl(callSignatureAssignabilityInInheritance2.ts, 59, 45)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 60, 10)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance2.ts, 0, 0)) >x : T, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 60, 26)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 60, 10)) >y : T, Symbol(y, Decl(callSignatureAssignabilityInInheritance2.ts, 60, 31)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 60, 10)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 60, 10)) a12: >(x: Array, y: T) => Array; // ok, less specific parameter type >a12 : (x: Base[], y: T) => Derived[], Symbol(a12, Decl(callSignatureAssignabilityInInheritance2.ts, 60, 43)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 61, 10)) >Array : T[], Symbol(Array, Decl(lib.d.ts, 1000, 23), Decl(lib.d.ts, 1171, 11)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance2.ts, 0, 0)) >x : Base[], Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 61, 33)) >Array : T[], Symbol(Array, Decl(lib.d.ts, 1000, 23), Decl(lib.d.ts, 1171, 11)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance2.ts, 0, 0)) >y : T, Symbol(y, Decl(callSignatureAssignabilityInInheritance2.ts, 61, 48)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 61, 10)) >Array : T[], Symbol(Array, Decl(lib.d.ts, 1000, 23), Decl(lib.d.ts, 1171, 11)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance2.ts, 2, 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(callSignatureAssignabilityInInheritance2.ts, 61, 73)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 62, 10)) >Array : T[], Symbol(Array, Decl(lib.d.ts, 1000, 23), Decl(lib.d.ts, 1171, 11)) >Derived : Derived, Symbol(Derived, Decl(callSignatureAssignabilityInInheritance2.ts, 2, 27)) >x : Base[], Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 62, 36)) >Array : T[], Symbol(Array, Decl(lib.d.ts, 1000, 23), Decl(lib.d.ts, 1171, 11)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance2.ts, 0, 0)) >y : T, Symbol(y, Decl(callSignatureAssignabilityInInheritance2.ts, 62, 51)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 62, 10)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 62, 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(callSignatureAssignabilityInInheritance2.ts, 62, 63)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 63, 10)) >x : { a: T; b: T; }, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 63, 13)) >a : T, Symbol(a, Decl(callSignatureAssignabilityInInheritance2.ts, 63, 17)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 63, 10)) >b : T, Symbol(b, Decl(callSignatureAssignabilityInInheritance2.ts, 63, 23)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 63, 10)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 63, 10)) a15: (x: T) => T[]; // ok >a15 : (x: T) => T[], Symbol(a15, Decl(callSignatureAssignabilityInInheritance2.ts, 63, 37)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 64, 10)) >x : T, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 64, 13)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 64, 10)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 64, 10)) a16: (x: T) => number[]; // ok >a16 : (x: T) => number[], Symbol(a16, Decl(callSignatureAssignabilityInInheritance2.ts, 64, 26)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 65, 10)) >Base : Base, Symbol(Base, Decl(callSignatureAssignabilityInInheritance2.ts, 0, 0)) >x : T, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 65, 26)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 65, 10)) a17: (x: (a: T) => T) => T[]; // ok >a17 : (x: (a: T) => T) => T[], Symbol(a17, Decl(callSignatureAssignabilityInInheritance2.ts, 65, 44)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 66, 10)) >x : (a: T) => T, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 66, 13)) >a : T, Symbol(a, Decl(callSignatureAssignabilityInInheritance2.ts, 66, 17)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 66, 10)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 66, 10)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 66, 10)) a18: (x: (a: T) => T) => T[]; // ok, no inferences for T but assignable to any >a18 : (x: (a: T) => T) => T[], Symbol(a18, Decl(callSignatureAssignabilityInInheritance2.ts, 66, 36)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 67, 10)) >x : (a: T) => T, Symbol(x, Decl(callSignatureAssignabilityInInheritance2.ts, 67, 13)) >a : T, Symbol(a, Decl(callSignatureAssignabilityInInheritance2.ts, 67, 17)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 67, 10)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 67, 10)) >T : T, Symbol(T, Decl(callSignatureAssignabilityInInheritance2.ts, 67, 10)) }