functionLiterals.ts(10,1): error TS2454: Variable 'b' is used before being assigned.
functionLiterals.ts(10,11): error TS2454: Variable 'b' is used before being assigned.
functionLiterals.ts(11,1): error TS2454: Variable 'b' is used before being assigned.
functionLiterals.ts(11,11): error TS2454: Variable 'b' is used before being assigned.
functionLiterals.ts(12,1): error TS2454: Variable 'b' is used before being assigned.
functionLiterals.ts(12,11): error TS2454: Variable 'b' is used before being assigned.
functionLiterals.ts(13,1): error TS2454: Variable 'b' is used before being assigned.
functionLiterals.ts(13,11): error TS2454: Variable 'b' is used before being assigned.
functionLiterals.ts(14,1): error TS2454: Variable 'b' is used before being assigned.
functionLiterals.ts(14,11): error TS2454: Variable 'b' is used before being assigned.
functionLiterals.ts(15,1): error TS2454: Variable 'b' is used before being assigned.
functionLiterals.ts(15,11): error TS2454: Variable 'b' is used before being assigned.
functionLiterals.ts(27,1): error TS2454: Variable 'c' is used before being assigned.
functionLiterals.ts(27,11): error TS2454: Variable 'c' is used before being assigned.
functionLiterals.ts(28,1): error TS2454: Variable 'c' is used before being assigned.
functionLiterals.ts(28,11): error TS2454: Variable 'c' is used before being assigned.
functionLiterals.ts(38,1): error TS2454: Variable 'b2' is used before being assigned.
functionLiterals.ts(38,12): error TS2454: Variable 'b2' is used before being assigned.
functionLiterals.ts(39,1): error TS2454: Variable 'b2' is used before being assigned.
functionLiterals.ts(39,12): error TS2454: Variable 'b2' is used before being assigned.
functionLiterals.ts(40,1): error TS2454: Variable 'b2' is used before being assigned.
functionLiterals.ts(40,12): error TS2454: Variable 'b2' is used before being assigned.
functionLiterals.ts(41,1): error TS2454: Variable 'b2' is used before being assigned.
functionLiterals.ts(41,12): error TS2454: Variable 'b2' is used before being assigned.
functionLiterals.ts(42,1): error TS2454: Variable 'b2' is used before being assigned.
functionLiterals.ts(42,12): error TS2454: Variable 'b2' is used before being assigned.
functionLiterals.ts(43,1): error TS2454: Variable 'b2' is used before being assigned.
functionLiterals.ts(43,12): error TS2454: Variable 'b2' is used before being assigned.
functionLiterals.ts(55,1): error TS2454: Variable 'c2' is used before being assigned.
functionLiterals.ts(55,12): error TS2454: Variable 'c2' is used before being assigned.
functionLiterals.ts(56,1): error TS2454: Variable 'c2' is used before being assigned.
functionLiterals.ts(56,12): error TS2454: Variable 'c2' is used before being assigned.


==== functionLiterals.ts (32 errors) ====
    // PropName<TypeParamList>(ParamList):ReturnType is equivalent to PropName: { <TypeParamList>(ParamList): ReturnType }
    
    var b: {
        func1(x: number): number;         // Method signature
        func2: (x: number) => number;     // Function type literal
        func3: { (x: number): number };   // Object type literal
    }
    
    // no errors
    b.func1 = b.func2;
    ~
!!! error TS2454: Variable 'b' is used before being assigned.
              ~
!!! error TS2454: Variable 'b' is used before being assigned.
    b.func1 = b.func3;
    ~
!!! error TS2454: Variable 'b' is used before being assigned.
              ~
!!! error TS2454: Variable 'b' is used before being assigned.
    b.func2 = b.func1;
    ~
!!! error TS2454: Variable 'b' is used before being assigned.
              ~
!!! error TS2454: Variable 'b' is used before being assigned.
    b.func2 = b.func3;
    ~
!!! error TS2454: Variable 'b' is used before being assigned.
              ~
!!! error TS2454: Variable 'b' is used before being assigned.
    b.func3 = b.func1;
    ~
!!! error TS2454: Variable 'b' is used before being assigned.
              ~
!!! error TS2454: Variable 'b' is used before being assigned.
    b.func3 = b.func2;
    ~
!!! error TS2454: Variable 'b' is used before being assigned.
              ~
!!! error TS2454: Variable 'b' is used before being assigned.
    
    var c: {
        func4(x: number): number;
        func4(s: string): string;
        func5: {
            (x: number): number;
            (s: string): string;
        };
    };
    
    // no errors
    c.func4 = c.func5;
    ~
!!! error TS2454: Variable 'c' is used before being assigned.
              ~
!!! error TS2454: Variable 'c' is used before being assigned.
    c.func5 = c.func4;
    ~
!!! error TS2454: Variable 'c' is used before being assigned.
              ~
!!! error TS2454: Variable 'c' is used before being assigned.
    
    // generic versions
    var b2: {
        func1<T>(x: T): number;         // Method signature
        func2: <T>(x: T) => number;     // Function type literal
        func3: { <T>(x: T): number };   // Object type literal
    }
    
    // no errors
    b2.func1 = b2.func2;
    ~~
!!! error TS2454: Variable 'b2' is used before being assigned.
               ~~
!!! error TS2454: Variable 'b2' is used before being assigned.
    b2.func1 = b2.func3;
    ~~
!!! error TS2454: Variable 'b2' is used before being assigned.
               ~~
!!! error TS2454: Variable 'b2' is used before being assigned.
    b2.func2 = b2.func1;
    ~~
!!! error TS2454: Variable 'b2' is used before being assigned.
               ~~
!!! error TS2454: Variable 'b2' is used before being assigned.
    b2.func2 = b2.func3;
    ~~
!!! error TS2454: Variable 'b2' is used before being assigned.
               ~~
!!! error TS2454: Variable 'b2' is used before being assigned.
    b2.func3 = b2.func1;
    ~~
!!! error TS2454: Variable 'b2' is used before being assigned.
               ~~
!!! error TS2454: Variable 'b2' is used before being assigned.
    b2.func3 = b2.func2;
    ~~
!!! error TS2454: Variable 'b2' is used before being assigned.
               ~~
!!! error TS2454: Variable 'b2' is used before being assigned.
    
    var c2: {
        func4<T>(x: T): number;
        func4<T>(s: T): string;
        func5: {
            <T>(x: T): number;
            <T>(s: T): string;
        };
    };
    
    // no errors
    c2.func4 = c2.func5;
    ~~
!!! error TS2454: Variable 'c2' is used before being assigned.
               ~~
!!! error TS2454: Variable 'c2' is used before being assigned.
    c2.func5 = c2.func4;
    ~~
!!! error TS2454: Variable 'c2' is used before being assigned.
               ~~
!!! error TS2454: Variable 'c2' is used before being assigned.
    