unionTypeCallSignatures2.ts(22,10): error TS2454: Variable 'f1' is used before being assigned.
unionTypeCallSignatures2.ts(23,10): error TS2454: Variable 'f1' is used before being assigned.
unionTypeCallSignatures2.ts(24,10): error TS2454: Variable 'f1' is used before being assigned.
unionTypeCallSignatures2.ts(27,10): error TS2454: Variable 'f2' is used before being assigned.
unionTypeCallSignatures2.ts(28,10): error TS2454: Variable 'f2' is used before being assigned.
unionTypeCallSignatures2.ts(29,10): error TS2454: Variable 'f2' is used before being assigned.
unionTypeCallSignatures2.ts(32,10): error TS2454: Variable 'f3' is used before being assigned.
unionTypeCallSignatures2.ts(33,10): error TS2454: Variable 'f3' is used before being assigned.
unionTypeCallSignatures2.ts(34,10): error TS2454: Variable 'f3' is used before being assigned.


==== unionTypeCallSignatures2.ts (9 errors) ====
    interface A {
        (x: number): number;
        (x: string, y?: string): boolean;
        (x: Date): void;
        <T>(x: T[]): T[];
    }
    
    interface B {
        (x: number): number;
        (x: string): string;
        (x: Date): void;
        <T>(x: T[]): T[];
    }
    
    interface C {
        (x: string, ...y: string[]): number;
        (x: number, s?: string): number;
        <T>(x: T[]): T[];
    }
    
    var f1: A | B | C;
    var n1 = f1(42);             // number
             ~~
!!! error TS2454: Variable 'f1' is used before being assigned.
    var s1 = f1("abc");          // boolean | string | number
             ~~
!!! error TS2454: Variable 'f1' is used before being assigned.
    var a1 = f1([true, false]);  // boolean[]
             ~~
!!! error TS2454: Variable 'f1' is used before being assigned.
    
    var f2: C | B | A;
    var n2 = f2(42);             // number
             ~~
!!! error TS2454: Variable 'f2' is used before being assigned.
    var s2 = f2("abc");          // number | string | boolean
             ~~
!!! error TS2454: Variable 'f2' is used before being assigned.
    var a2 = f2([true, false]);  // boolean[]
             ~~
!!! error TS2454: Variable 'f2' is used before being assigned.
    
    var f3: B | A | C;
    var n3 = f3(42);             // number
             ~~
!!! error TS2454: Variable 'f3' is used before being assigned.
    var s3 = f3("abc");          // string | boolean | number
             ~~
!!! error TS2454: Variable 'f3' is used before being assigned.
    var a3 = f3([true, false]);  // boolean[]
             ~~
!!! error TS2454: Variable 'f3' is used before being assigned.
    
    