title: Why does TypeScript require optional parameters after required parameters?
body: <p>This works:</p>
  
  <pre><code>public console(message: string | undefined, suppressLevel: boolean) {}
  </code></pre>
  
  <p>But this doesn't:</p>
  
  <pre><code>public console(message?: string, suppressLevel: boolean) {}
  </code></pre>
  
  <p>Considering the <code>?</code> seems to basically be a shorthand for <code>| undefined</code> (and when you mouseover in VS Code it says just that), why does TypeScript make a distinction?  You could explicitly pass in <code>undefined</code> for an optional parameter and it would be the same as not specifying it at the end.</p>