inheritedOverloadedSpecializedSignatures.ts(11,1): error TS2454: Variable 'b' is used before being assigned.
inheritedOverloadedSpecializedSignatures.ts(44,20): error TS2454: Variable 'c' is used before being assigned.
inheritedOverloadedSpecializedSignatures.ts(45,18): error TS2454: Variable 'c' is used before being assigned.
inheritedOverloadedSpecializedSignatures.ts(46,19): error TS2454: Variable 'c' is used before being assigned.
inheritedOverloadedSpecializedSignatures.ts(47,18): error TS2454: Variable 'c' is used before being assigned.
inheritedOverloadedSpecializedSignatures.ts(48,16): error TS2454: Variable 'c' is used before being assigned.
inheritedOverloadedSpecializedSignatures.ts(49,20): error TS2454: Variable 'c' is used before being assigned.
inheritedOverloadedSpecializedSignatures.ts(50,21): error TS2454: Variable 'c' is used before being assigned.
inheritedOverloadedSpecializedSignatures.ts(51,18): error TS2454: Variable 'c' is used before being assigned.
inheritedOverloadedSpecializedSignatures.ts(52,16): error TS2454: Variable 'c' is used before being assigned.


==== inheritedOverloadedSpecializedSignatures.ts (10 errors) ====
    interface A {
      (key:string):void;
    }
    
    interface B extends A {
      (key:'foo'):string;
    }
    
    var b:B;
    // Should not error
    b('foo').charAt(0);
    ~
!!! error TS2454: Variable 'b' is used before being assigned.
    
    interface A {
        (x: 'A1'): string;
        (x: string): void;
    }
    
    interface B extends A {
        (x: 'B1'): number;
    }
    
    interface A {
        (x: 'A2'): boolean;
    }
    
    interface B  {
        (x: 'B2'): string[];
    }
    
    interface C1 extends B {
    	(x: 'C1'): number[];
    }
    
    interface C2 extends B {
    	(x: 'C2'): boolean[];
    }
    
    interface C extends C1, C2 {
    	(x: 'C'): string;
    }
    
    var c: C;
    // none of these lines should error
    var x1: string[] = c('B2');
                       ~
!!! error TS2454: Variable 'c' is used before being assigned.
    var x2: number = c('B1');
                     ~
!!! error TS2454: Variable 'c' is used before being assigned.
    var x3: boolean = c('A2');
                      ~
!!! error TS2454: Variable 'c' is used before being assigned.
    var x4: string = c('A1');
                     ~
!!! error TS2454: Variable 'c' is used before being assigned.
    var x5: void = c('A0');
                   ~
!!! error TS2454: Variable 'c' is used before being assigned.
    var x6: number[] = c('C1');
                       ~
!!! error TS2454: Variable 'c' is used before being assigned.
    var x7: boolean[] = c('C2');
                        ~
!!! error TS2454: Variable 'c' is used before being assigned.
    var x8: string = c('C');
                     ~
!!! error TS2454: Variable 'c' is used before being assigned.
    var x9: void = c('generic');
                   ~
!!! error TS2454: Variable 'c' is used before being assigned.
    