首页 > 解决方案 > 有没有办法使用 Typescript 保护您的代码免受 Javascript 怪癖 `Array(length) vs Array(el1,el2,...)` 的影响

问题描述

不是在寻找其他方法来复制数组。我的问题特别是关于类型。

Typescript 没有反对这种代码(操场):

const sum = original_numbers => {
    const numbers_copy = new Array(...original_numbers) // here is the problem
    const res = numbers_copy.reduce((acc,v) => acc+v,0)
    console.log(res)
    return res
}
sum([1,2]) // 3 as expected
sum([1  ]) // 0 !!! And typescript doesn't complain. You can check the playground.

有什么可以做的吗?

标签: javascripttypescript

解决方案


Array 构造函数有问题(包括这个)。使用 TSLint,您可以使用prefer-array-literal规则来禁止new Array.

对于 ESLint,您可以使用no-array-constructor

要从参数创建数组,请考虑Array.of改用。


推荐阅读