遇到此代码段时,我正在阅读别人的代码。
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进行验证,因为它确实违反了标准。
答案 0 :(得分:5)
只需显式传递undefined
即可,而不是隐式传递:
.fill(undefined)
这不是JavaScript错误,因为JS会隐式传递undefined
,但是TS中的一个提示您隐式传递的参数对于可读性而言是一件坏事。
顺便说一句:
const array = Array.from({ length: 100 }, () => Math.floor(Math.random() * 100 + 1));