Babel.js 巴别塔不正确的传播转换

bfnvny8b  于 2022-12-16  发布在  Babel
关注(0)|答案(1)|浏览(176)

Babel错误地转换/转化以下代码

const arr = [...new Set([1, 2, 3, 1])]

变成

var arr = [].concat(new Set([1, 2, 3, 1]))

第一个返回数字列表,而另一个返回集合列表
这是巴别塔虫吗
使用@babel/plugin-transform-spread@7.14.6@babel/plugin-transform-destructuring@7.14.7

qmb5sa22

qmb5sa221#

这看起来像是与babel/babel#9108Correctly transform spreads to use proper concat method相关,它被合并到v7.2.2中。
正如在smashercosmo的评论中提到的公关...
此PR的一个缺点是,在此之前,如果有人试图在loose模式下传播Set,则会抛出清 debugging 误,但现在他将得到[Set()]的错误输出,这将更难发现。
我想这就是你在这里看到的,😔可能是因为你的Babel配置把loose设置成了true,但是我不确定。
一种可能的解决方法是使用Array.from

const myArrayWithDupes = ['a', 'b', 'c', 'a'];

console.log([...new Set(myArrayWithDupes)]); // your original line
console.log([].concat(new Set(myArrayWithDupes))); // incorrect when `loose` is set to `true`
console.log(Array.from(new Set(myArrayWithDupes))); // a potential workaround

相关问题