这就是 JavaScript 扩展运算符允许将数组作为函数参数传递的方式:
function f(a, b) { console.log(a, b) }
let arr = [1, 2]
f(...arr) // all fine!
TypeScript 5.3.2 但是不接受这一点:
function f(a, b) { console.log(a, b) }
let arr = [1, 2]
f(...arr) // error: A spread argument must either have a tuple type or be passed to a rest parameter.(2556)
对我来说这是一个错误,因为有效的 JavaScript 应该始终是有效的 TypeScript。
如何避免这个错误,为什么会发生?
microsoft/TypeScript#49700
。
这里的问题是
arr
的默认推断类型,即 number[]
。
如果您明确指定
arr
为元组 [number, number]
(与函数签名兼容),则它可以正常工作。例如:
function f(a: unknown, b: unknown) { console.log(a, b) }
let arr: [unknown, unknown] = [1, 2]
f(...arr)