tests/cases/conformance/types/witness/witness.ts(8,21): error TS2372: Parameter 'pInit' cannot be referenced in its initializer.
tests/cases/conformance/types/witness/witness.ts(33,5): error TS2403: Subsequent variable declarations must have the same type.  Variable 'co1' must be of type 'any', but here has type 'number'.
tests/cases/conformance/types/witness/witness.ts(37,5): error TS2403: Subsequent variable declarations must have the same type.  Variable 'co3' must be of type 'any', but here has type 'number'.
tests/cases/conformance/types/witness/witness.ts(41,5): error TS2403: Subsequent variable declarations must have the same type.  Variable 'as1' must be of type 'any', but here has type 'number'.
tests/cases/conformance/types/witness/witness.ts(43,5): error TS2403: Subsequent variable declarations must have the same type.  Variable 'as2' must be of type 'any', but here has type 'number'.
tests/cases/conformance/types/witness/witness.ts(47,5): error TS2403: Subsequent variable declarations must have the same type.  Variable 'cnd1' must be of type 'any', but here has type 'number'.
tests/cases/conformance/types/witness/witness.ts(61,5): error TS2403: Subsequent variable declarations must have the same type.  Variable 'and1' must be of type 'any', but here has type 'string'.
tests/cases/conformance/types/witness/witness.ts(114,5): error TS2403: Subsequent variable declarations must have the same type.  Variable 'propAcc1' must be of type 'any', but here has type '{ m: any; }'.


==== tests/cases/conformance/types/witness/witness.ts (8 errors) ====
    
    
    
    
    // Initializers
    var varInit = varInit; // any
    var pInit: any;
    function fn(pInit = pInit) {
                        ~~~~~
!!! error TS2372: Parameter 'pInit' cannot be referenced in its initializer.
        var pInit: any;
    }
    class InitClass {
        x = this.x;
        fn() {
            var y = this.x;
            var y: any;
        }
    }
    
    // Return type
    function fnReturn1() {
        return fnReturn1();
    }
    var a: any;
    var a = fnReturn1();
    
    function fnReturn2() {
        return fnReturn2;
    }
    var fnr2: () => any = fnReturn2();
    
    // Comma
    var co1 = (co1, 3);
    var co1: number;
        ~~~
!!! error TS2403: Subsequent variable declarations must have the same type.  Variable 'co1' must be of type 'any', but here has type 'number'.
    var co2 = (3, 4, co2);
    var co2: any;
    var co3 = (co1, co2, co3, co1);
    var co3: number;
        ~~~
!!! error TS2403: Subsequent variable declarations must have the same type.  Variable 'co3' must be of type 'any', but here has type 'number'.
    
    // Assignment
    var as1 = (as1 = 2);
    var as1: number;
        ~~~
!!! error TS2403: Subsequent variable declarations must have the same type.  Variable 'as1' must be of type 'any', but here has type 'number'.
    var as2 = (as2 = as2 = 2);
    var as2: number;
        ~~~
!!! error TS2403: Subsequent variable declarations must have the same type.  Variable 'as2' must be of type 'any', but here has type 'number'.
    
    // Conditional
    var cnd1 = cnd1 ? 0 : 1;
    var cnd1: number;
        ~~~~
!!! error TS2403: Subsequent variable declarations must have the same type.  Variable 'cnd1' must be of type 'any', but here has type 'number'.
    var cnd2 = cnd1 ? cnd1 ? '' : "" : '';
    var cnd2: string;
    
    // ||
    var or1 = or1 || '';
    var or1: any;
    var or2 = '' || or2;
    var or2: any;
    var or3 = or3 || or3;
    var or3: any;
    
    // &&
    var and1 = and1 && '';
    var and1: string;
        ~~~~
!!! error TS2403: Subsequent variable declarations must have the same type.  Variable 'and1' must be of type 'any', but here has type 'string'.
    var and2 = '' && and2;
    var and2: any;
    var and3 = and3 && and3;
    var and3: any;
    
    // function call return type
    function fnCall() {
        return fnCall();
    }
    var fnCallResult = fnCall();
    var fnCallResult: any;
    
    // Call argument
    function fnArg1(x: typeof fnArg1, y: number) {
        var x: (n: typeof fnArg1, m: number) => void;
        fnArg1(fnArg1, 0);
    }
    
    function overload1(x: (n: string) => string): string;
    function overload1(x: (n: number) => number): number;
    function overload1(x: (n: any) => any): any;
    function overload1() { return undefined; };
    
    function fnArg2() {
        return overload1(fnArg2);
    }
    var t = fnArg2(); // t: should be 'any', but is 'string'
    
    // New operator
    class C {
        fn1() {
            return new (this.fn1())();
        }
        fn2() {
            return new (this.fn2());
        }
        fn3() {
            var a: new(x) => number;
            return new a(this.fn3);
        }
    }
    
    function fn5() {
        var a: new (x) => number;
        return new a(fn5);
    }
    var fn5r = fn5(); // fn5r: should be 'any', but is 'number'
    
    // Property access
    var propAcc1 = {
        m: propAcc1.m
    };
    var propAcc1: { m: any; }
        ~~~~~~~~
!!! error TS2403: Subsequent variable declarations must have the same type.  Variable 'propAcc1' must be of type 'any', but here has type '{ m: any; }'.
    
    // Property access of module member
    module M2 {
        export var x = M2.x;
        var y = x;
        var y: any;
    }
    
    // Property access of class instance type
    class C2 {
        n = this.n; // n: any
    }
    var c2inst = new C2().n;
    var c2inst: any;
    
    // Constructor function property access
    class C3 {
        static q = C3.q;
    }
    var qq = C3.q;
    var qq: any;
    
    // Parentheses - tested a bunch above
    
    
    