为什么 TypeScript 不允许将带有扩展运算符的数组作为函数参数传递?

问题描述 投票:0回答:1

这就是 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。

如何避免这个错误,为什么会发生?

在 TypeScript 存储库中发现了一个很长的讨论:

microsoft/TypeScript#49700

typescript
1个回答
0
投票

这里的问题是

arr
的默认推断类型,即
number[]

如果您明确指定

arr
为元组
[number, number]
(与函数签名兼容),则它可以正常工作。例如:

function f(a: unknown, b: unknown) { console.log(a, b) }
let arr: [unknown, unknown] = [1, 2]
f(...arr)
© www.soinside.com 2019 - 2024. All rights reserved.