【发布时间】:2022-11-26 18:17:14
【问题描述】:
我在 JavaScript 中有以下(工作)函数:
function solve(strArr) {
return strArr.reduce(function ([x, y], curr) {
switch (curr) {
case 'up': return [x, y + 1]
case 'down': return [x, y - 1]
case 'left': return [x - 1, y]
case 'right': return [x + 1, y]
}
}, [0, 0])
}
我正在尝试使用 TypeScript 将其重写为:
function solve(strArr: string[]): number[] {
return strArr.reduce(([x, y]: number[], curr: string) => {
switch (curr) {
case 'up': return [x, y + 1]
case 'down': return [x, y - 1]
case 'left': return [x - 1, y]
case 'right': return [x + 1, y]
}
}, [0,0])
}
但我收到 Type 'string' is not assignable to type 'number[]'. 错误,我知道这是指累加器,但不知道如何解决。
根据Rajesh's suggestion,将strArr 的类型更改为any 可以解决问题,但是给它指定我在函数中使用的特定类型是行不通的;为什么?
【问题讨论】:
-
function solve(strArr : any ) { any 解决所有问题,但稍后尝试替换它
-
@RajeshKanna 是的,它解决了。以后再换是什么意思?
-
由于 .reduce() 方法是通用的,它几乎接受所有具有长度属性的类型。所以你是安全的。但是为函数指定特定类型的参数可以帮助您充分利用 TypeScript 的强类型功能。
-
如果你打算使用 TypeScript,使用打字稿- 指定参数类型和返回值。如果
strArr不比string[]更具体,那么你的减速器没有总是返回number[](不应该是[number, number]吗?) -
@RajeshKanna 编辑了问题以反映您的解决方案。仍然不明白为什么具体会引发错误...
标签: typescript