title: Arrow functions with void return type are not being type-checked?
body: <p>Why does a <code>() =&gt; void</code> variable not enforce the return type of its assigned function?</p>
  
  <pre><code>// Error as expected
  let x: void = 1
  
  // No error?
  let y: () =&gt; void = () =&gt; 1
  
  // Error as expected
  function z(): void { return 1 }
  </code></pre>
  
  <p>It seems weird that arrow functions behave differently than the other examples above.</p>
  
  <p>The <code>() =&gt; undefined</code> type does what I would expect <code>() =&gt; void</code> to do.</p>
  
  <pre><code>// Error as expected
  let foo: () =&gt; undefined = () =&gt; 1
  </code></pre>
  
  <p>I wonder if this is a bug?</p>