callSignatureAssignabilityInInheritance.ts(57,15): error TS2430: Interface 'I2' incorrectly extends interface 'Base2'.
  The types returned by 'a(...)' are incompatible between these types.
    Type 'string' is not assignable to type 'number'.
callSignatureAssignabilityInInheritance.ts(63,15): error TS2430: Interface 'I3' incorrectly extends interface 'Base2'.
  The types returned by 'a2(...)' are incompatible between these types.
    Type 'string' is not assignable to type 'T'.
      'T' could be instantiated with an arbitrary type which could be unrelated to 'string'.


==== callSignatureAssignabilityInInheritance.ts (2 errors) ====
    namespace CallSignature {
        interface Base { // T
            // M's
            (x: number): void;
            (x: number, y: number): void;
        }
    
        // S's
        interface I extends Base {
            // N's
            (x: number): number; // ok because base returns void
            (x: number, y: number): boolean; // ok because base returns void
            <T>(x: T): string; // ok because base returns void
        }
    
        interface Base2 { // T
            // M's
            (x: number): number;
        }
    
        // S's
        interface I2 extends Base2 {
            // N's
            (x: number): string; // error because base returns non-void;
        }
    
        // S's
        interface I3 extends Base2 {
            // N's
            <T>(x: T): string; // ok, adds a new call signature
        }
    }
    
    namespace MemberWithCallSignature {
        interface Base { // T
            // M's
            a: (x: number) => void;
            a2: (x: number, y: number) => void;
            a3: <T>(x: T) => void;
        }
    
        // S's
        interface I extends Base {
            // N's
            a: (x: number) => number; // ok because base returns void
            a2: (x: number, y: number) => boolean; // ok because base returns void
            a3: <T>(x: T) => string; // ok because base returns void
        }
    
        interface Base2 { // T
            // M's
            a: (x: number) => number;
            a2: <T>(x: T) => T;
        }
    
        // S's
        interface I2 extends Base2 {
                  ~~
!!! error TS2430: Interface 'I2' incorrectly extends interface 'Base2'.
!!! error TS2430:   The types returned by 'a(...)' are incompatible between these types.
!!! error TS2430:     Type 'string' is not assignable to type 'number'.
            // N's
            a: (x: number) => string; // error because base returns non-void;
        }
    
        // S's
        interface I3 extends Base2 {
                  ~~
!!! error TS2430: Interface 'I3' incorrectly extends interface 'Base2'.
!!! error TS2430:   The types returned by 'a2(...)' are incompatible between these types.
!!! error TS2430:     Type 'string' is not assignable to type 'T'.
!!! error TS2430:       'T' could be instantiated with an arbitrary type which could be unrelated to 'string'.
            // N's
            a2: <T>(x: T) => string; // error because base returns non-void;
        }
    }