fatarrowfunctionsOptionalArgs.ts(7,2): error TS7006: Parameter 'arg' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(10,1): error TS7006: Parameter 'arg' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(16,2): error TS7006: Parameter 'arg' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(31,2): error TS7006: Parameter 'arg1' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(31,8): error TS7006: Parameter 'arg2' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(33,2): error TS7006: Parameter 'arg1' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(33,9): error TS7006: Parameter 'arg2' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(37,2): error TS7006: Parameter 'arg1' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(38,2): error TS7006: Parameter 'arg1' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(42,3): error TS7006: Parameter 'arg' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(44,3): error TS7006: Parameter 'arg' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(51,6): error TS7006: Parameter 'arg' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(55,10): error TS7006: Parameter 'arg' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(57,10): error TS7006: Parameter 'arg' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(65,11): error TS7006: Parameter 'arg' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(67,11): error TS7006: Parameter 'arg' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(75,17): error TS7006: Parameter 'arg' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(77,17): error TS7006: Parameter 'arg' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(85,1): error TS2872: This kind of expression is always truthy.
fatarrowfunctionsOptionalArgs.ts(85,3): error TS7006: Parameter 'a' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(85,28): error TS7006: Parameter 'b' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(85,53): error TS7006: Parameter 'c' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(88,2): error TS7006: Parameter 'a' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(88,23): error TS1005: ';' expected.
fatarrowfunctionsOptionalArgs.ts(88,26): error TS7006: Parameter 'b' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(88,31): error TS7006: Parameter 'c' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(88,38): error TS1005: ';' expected.
fatarrowfunctionsOptionalArgs.ts(88,41): error TS7006: Parameter 'c' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(88,46): error TS7006: Parameter 'd' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(92,3): error TS7006: Parameter 'arg' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(94,3): error TS7006: Parameter 'arg' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(100,8): error TS7006: Parameter 'arg' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(101,3): error TS7006: Parameter 'arg' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(101,23): error TS7006: Parameter 'arg' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(103,3): error TS7006: Parameter 'arg' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(103,24): error TS7006: Parameter 'arg' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(108,3): error TS7006: Parameter 'arg1' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(108,9): error TS7006: Parameter 'arg2' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(108,31): error TS7006: Parameter 'arg1' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(108,36): error TS7006: Parameter 'arg2' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(109,3): error TS7006: Parameter 'arg1' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(109,42): error TS7006: Parameter 'arg1' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(116,6): error TS7006: Parameter 'a' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(117,7): error TS7006: Parameter 'a' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(118,6): error TS7006: Parameter 'a' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(121,6): error TS7006: Parameter 'a' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(122,6): error TS7006: Parameter 'a' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(122,9): error TS7006: Parameter 'b' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(128,6): error TS7006: Parameter 'a' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(129,6): error TS7006: Parameter 'a' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(129,13): error TS7006: Parameter 'b' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(129,20): error TS7006: Parameter 'c' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(130,13): error TS7006: Parameter 'a' implicitly has an 'any' type.
fatarrowfunctionsOptionalArgs.ts(130,24): error TS7006: Parameter 'b' implicitly has an 'any' type.


==== fatarrowfunctionsOptionalArgs.ts (54 errors) ====
    // valid
    
    // no params
    () => 1;
    
    // one param, no type
    (arg) => 2;
     ~~~
!!! error TS7006: Parameter 'arg' implicitly has an 'any' type.
    
    // one param, no type
    arg => 2;
    ~~~
!!! error TS7006: Parameter 'arg' implicitly has an 'any' type.
    
    // one param, no type with default value
    (arg = 1) => 3;
    
    // one param, no type, optional
    (arg?) => 4;
     ~~~~
!!! error TS7006: Parameter 'arg' implicitly has an 'any' type.
    
    // typed param
    (arg: number) => 5;
    
    // typed param with default value
    (arg: number = 0) => 6;
    
    // optional param
    (arg?: number) => 7;
    
    // var arg param
    (...arg: number[]) => 8;
    
    // multiple arguments
    (arg1, arg2) => 12;
     ~~~~
!!! error TS7006: Parameter 'arg1' implicitly has an 'any' type.
           ~~~~
!!! error TS7006: Parameter 'arg2' implicitly has an 'any' type.
    (arg1 = 1, arg2 =3) => 13;
    (arg1?, arg2?) => 14;
     ~~~~~
!!! error TS7006: Parameter 'arg1' implicitly has an 'any' type.
            ~~~~~
!!! error TS7006: Parameter 'arg2' implicitly has an 'any' type.
    (arg1: number, arg2: number) => 15;
    (arg1: number = 0, arg2: number = 1) => 16;
    (arg1?: number, arg2?: number) => 17;
    (arg1, ...arg2: number[]) => 18;
     ~~~~
!!! error TS7006: Parameter 'arg1' implicitly has an 'any' type.
    (arg1, arg2?: number) => 19;
     ~~~~
!!! error TS7006: Parameter 'arg1' implicitly has an 'any' type.
    
    // in paren
    (() => 21);
    ((arg) => 22);
      ~~~
!!! error TS7006: Parameter 'arg' implicitly has an 'any' type.
    ((arg = 1) => 23);
    ((arg?) => 24);
      ~~~~
!!! error TS7006: Parameter 'arg' implicitly has an 'any' type.
    ((arg: number) => 25);
    ((arg: number = 0) => 26);
    ((arg?: number) => 27);
    ((...arg: number[]) => 28);
    
    // in multiple paren
    (((((arg) => { return 32; }))));
         ~~~
!!! error TS7006: Parameter 'arg' implicitly has an 'any' type.
    
    // in ternary exression
    false ? () => 41 : null;
    false ? (arg) => 42 : null;
             ~~~
!!! error TS7006: Parameter 'arg' implicitly has an 'any' type.
    false ? (arg = 1) => 43 : null;
    false ? (arg?) => 44 : null;
             ~~~~
!!! error TS7006: Parameter 'arg' implicitly has an 'any' type.
    false ? (arg: number) => 45 : null;
    false ? (arg?: number) => 46 : null;
    false ? (arg?: number = 0) => 47 : null;
    false ? (...arg: number[]) => 48 : null;
    
    // in ternary exression within paren
    false ? (() => 51) : null;
    false ? ((arg) => 52) : null;
              ~~~
!!! error TS7006: Parameter 'arg' implicitly has an 'any' type.
    false ? ((arg = 1) => 53) : null;
    false ? ((arg?) => 54) : null;
              ~~~~
!!! error TS7006: Parameter 'arg' implicitly has an 'any' type.
    false ? ((arg: number) => 55) : null;
    false ? ((arg?: number) => 56) : null;
    false ? ((arg?: number = 0) => 57) : null;
    false ? ((...arg: number[]) => 58) : null;
    
    // ternary exression's else clause
    false ? null : () => 61;
    false ? null : (arg) => 62;
                    ~~~
!!! error TS7006: Parameter 'arg' implicitly has an 'any' type.
    false ? null : (arg = 1) => 63;
    false ? null : (arg?) => 64;
                    ~~~~
!!! error TS7006: Parameter 'arg' implicitly has an 'any' type.
    false ? null : (arg: number) => 65;
    false ? null : (arg?: number) => 66;
    false ? null : (arg?: number = 0) => 67;
    false ? null : (...arg: number[]) => 68;
    
    
    // nested ternary expressions
    ((a?) => { return a; }) ? (b? ) => { return b; } : (c? ) => { return c; };
    ~~~~~~~~~~~~~~~~~~~~~~~
!!! error TS2872: This kind of expression is always truthy.
      ~~
!!! error TS7006: Parameter 'a' implicitly has an 'any' type.
                               ~~
!!! error TS7006: Parameter 'b' implicitly has an 'any' type.
                                                        ~~
!!! error TS7006: Parameter 'c' implicitly has an 'any' type.
    
    //multiple levels
    (a?) => { return a; } ? (b)=>(c)=>81 : (c)=>(d)=>82;
     ~~
!!! error TS7006: Parameter 'a' implicitly has an 'any' type.
                          ~
!!! error TS1005: ';' expected.
                             ~
!!! error TS7006: Parameter 'b' implicitly has an 'any' type.
                                  ~
!!! error TS7006: Parameter 'c' implicitly has an 'any' type.
                                         ~
!!! error TS1005: ';' expected.
                                            ~
!!! error TS7006: Parameter 'c' implicitly has an 'any' type.
                                                 ~
!!! error TS7006: Parameter 'd' implicitly has an 'any' type.
    
    
    // In Expressions
    ((arg) => 90) instanceof Function;
      ~~~
!!! error TS7006: Parameter 'arg' implicitly has an 'any' type.
    ((arg = 1) => 91) instanceof Function;
    ((arg? ) => 92) instanceof Function;
      ~~~~
!!! error TS7006: Parameter 'arg' implicitly has an 'any' type.
    ((arg: number) => 93) instanceof Function;
    ((arg: number = 1) => 94) instanceof Function;
    ((arg?: number) => 95) instanceof Function;
    ((...arg: number[]) => 96) instanceof Function;
    
    '' + ((arg) => 100);
           ~~~
!!! error TS7006: Parameter 'arg' implicitly has an 'any' type.
    ((arg) => 0) + '' + ((arg) => 101);
      ~~~
!!! error TS7006: Parameter 'arg' implicitly has an 'any' type.
                          ~~~
!!! error TS7006: Parameter 'arg' implicitly has an 'any' type.
    ((arg = 1) => 0) + '' + ((arg = 2) => 102);
    ((arg?) => 0) + '' + ((arg?) => 103);
      ~~~~
!!! error TS7006: Parameter 'arg' implicitly has an 'any' type.
                           ~~~~
!!! error TS7006: Parameter 'arg' implicitly has an 'any' type.
    ((arg:number) => 0) + '' + ((arg:number) => 104);
    ((arg:number = 1) => 0) + '' + ((arg:number = 2) => 105);
    ((arg?:number = 1) => 0) + '' + ((arg?:number = 2) => 106);
    ((...arg:number[]) => 0) + '' + ((...arg:number[]) => 107);
    ((arg1, arg2?) => 0) + '' + ((arg1,arg2?) => 108);
      ~~~~
!!! error TS7006: Parameter 'arg1' implicitly has an 'any' type.
            ~~~~~
!!! error TS7006: Parameter 'arg2' implicitly has an 'any' type.
                                  ~~~~
!!! error TS7006: Parameter 'arg1' implicitly has an 'any' type.
                                       ~~~~~
!!! error TS7006: Parameter 'arg2' implicitly has an 'any' type.
    ((arg1, ...arg2:number[]) => 0) + '' + ((arg1, ...arg2:number[]) => 108);
      ~~~~
!!! error TS7006: Parameter 'arg1' implicitly has an 'any' type.
                                             ~~~~
!!! error TS7006: Parameter 'arg1' implicitly has an 'any' type.
    
    
    // Function Parameters
    function foo(...arg: any[]) { }
    
    foo(
        (a) => 110, 
         ~
!!! error TS7006: Parameter 'a' implicitly has an 'any' type.
        ((a) => 111), 
          ~
!!! error TS7006: Parameter 'a' implicitly has an 'any' type.
        (a) => {
         ~
!!! error TS7006: Parameter 'a' implicitly has an 'any' type.
            return 112;
        },
        (a? ) => 113, 
         ~~
!!! error TS7006: Parameter 'a' implicitly has an 'any' type.
        (a, b? ) => 114, 
         ~
!!! error TS7006: Parameter 'a' implicitly has an 'any' type.
            ~~
!!! error TS7006: Parameter 'b' implicitly has an 'any' type.
        (a: number) => 115, 
        (a: number = 0) => 116, 
        (a = 0) => 117, 
        (a?: number = 0) => 118, 
        (...a: number[]) => 119, 
        (a, b? = 0, ...c: number[]) => 120,
         ~
!!! error TS7006: Parameter 'a' implicitly has an 'any' type.
        (a) => (b) => (c) => 121,
         ~
!!! error TS7006: Parameter 'a' implicitly has an 'any' type.
                ~
!!! error TS7006: Parameter 'b' implicitly has an 'any' type.
                       ~
!!! error TS7006: Parameter 'c' implicitly has an 'any' type.
        false? (a) => 0 : (b) => 122
                ~
!!! error TS7006: Parameter 'a' implicitly has an 'any' type.
                           ~
!!! error TS7006: Parameter 'b' implicitly has an 'any' type.
    );