为什么浏览器可以理解此代码段,但我的打字稿编译器却不明白?

时间:2018-11-01 17:45:25

标签: javascript typescript ecmascript-6

遇到此代码段时,我正在阅读别人的代码。

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

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

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

1 个答案:

答案 0 :(得分:5)

只需显式传递undefined即可,而不是隐式传递:

  .fill(undefined)

这不是JavaScript错误,因为JS会隐式传递undefined,但是TS中的一个提示您隐式传递的参数对于可读性而言是一件坏事。


顺便说一句:

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