【发布时间】:2018-11-02 01:49:30
【问题描述】:
当我遇到这个 sn-p 时,我正在阅读别人的代码。
let array = Array(100)
.fill()
.map(_ => {
return Math.floor(Math.random() * 100 + 1))
});
当我自己实现这个时,我的 typescript 编译器抛出了一个错误,“错误 TS2554: Expected 1-3 arguments, but got 0.”,这是有道理的。数组函数 .fill() 至少需要一个参数。将数组记录到浏览器的控制台时,我看到实际上已经生成了 100 个随机数并映射到数组中。这就是我的困惑开始的地方。
我确实有一些想法......我在我的 tsconfig 中瞄准 es5。对我来说有意义的是 .fill() 的实现在 ES6 中发生了变化,并且浏览器能够理解代码,因为它不违反 ES6 标准,但是 typescript 编译器正在针对 ES5 进行验证,它确实违反了标准。
【问题讨论】:
-
你为什么叫填充?关于 Typescript,你真的不能因为抱怨而责怪它,因为签名确实需要一个值来填充它。
-
@ChaosPandion 所以 map() 运行....
-
@epascarello - 我不明白这一点。
map函数是在Array原型上定义的,所以调用Array(100)就足够了。 -
不,map 不会在未初始化的索引上运行.... 试试看。
Array(10).map(()=>Date.now()) -
@chaosPandion
.map跳过空槽,使用.fill()将空槽转换为undefined使用.map迭代的槽。
标签: javascript typescript ecmascript-6