title: Why `downlevelIteration` is not on by default?
body: <p>When targeting ES5 with usage of spread operator <code>...</code> to convert an <code>Iterator</code> to an <code>Array</code>, it shows the error to use <code>-downlevelIteration</code> compiler option. Once it is on, spread operators seem just work flawlessly.</p>
  
  <p>I wonder why is there a need to specify this? Are there any downsides/limitation when it is enabled besides adding more emitted generated code from tslib?</p>
  
  <p>Another example: <strong>Dynamically create array of N</strong> (eg. 3):</p>
  
  <pre><code>[...Array(3).keys()]  // output: [0, 1, 2]
  </code></pre>
  
  <p>It displays an error in VS Code:<br>
  <a href="https://i.stack.imgur.com/cSrYT.png" rel="noreferrer"><img src="https://i.stack.imgur.com/cSrYT.png" alt="enter image description here"></a></p>
  
  <p>Error message from <code>tsc</code>:</p>
  
  <blockquote>
    <p>Type 'IterableIterator' is not an array type or a string type. Use compiler option '--downlevelIteration' to allow iterating of iterators.</p>
  </blockquote>
  
  <p><a href="https://www.typescriptlang.org/play/#src=%5B...Array(3).keys()%5D" rel="noreferrer">Edit and view the code and error in TypeScript Playground</a></p>