为什么浏览器会理解这个片段,但我的打字稿编译器却没有?

Cod*_*son 0 javascript typescript ecmascript-6

当我遇到这个片段时,我正在阅读别人的代码.

let array = Array(100)
   .fill()
   .map(_ => { 
       return Math.floor(Math.random() * 100 + 1)) 
   });
Run Code Online (Sandbox Code Playgroud)

当我自己实现这个时,我的打字稿编译器抛出一个错误,"错误TS2554:预期1-3个参数,但得到0",这是有道理的.Array函数.fill()至少需要一个参数.将数组记录到浏览器控制台时,我看到实际生成了100个随机数并映射到数组中.这就是我的困惑开始的地方.

我有一些想法...我在我的tsconfig中定位es5.对我来说有意义的是.fill()的实现在ES6中发生了变化,浏览器能够理解代码,因为它不违反ES6标准,但是打字稿编译器正在验证ES5,它确实违反了ES5标准.

Jon*_*lms 5

只是显式传递undefined而不是隐式传递它:

  .fill(undefined)
Run Code Online (Sandbox Code Playgroud)

它不是一个JavaScript错误,因为JS会隐式传递undefined,但来自TS的一个暗示你隐式传递参数对于可读性是一件坏事.


顺便说一句,一个oneliner:

  const array = Array.from({ length: 100 }, () => Math.floor(Math.random() * 100 + 1));
Run Code Online (Sandbox Code Playgroud)