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

x00*_*x00 1 javascript 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.
Run Code Online (Sandbox Code Playgroud)

有什么可以做的吗?

Cer*_*nce 5

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

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

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