// Initializers var varInit = varInit; // any var pInit: any; function fn(pInit = pInit) { 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; var co2 = (3, 4, co2); var co2: any; var co3 = (co1, co2, co3, co1); var co3: number; // Assignment var as1 = (as1 = 2); var as1: number; var as2 = (as2 = as2 = 2); var as2: number; // Conditional var cnd1 = cnd1 ? 0 : 1; var cnd1: 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; 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; } // 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