【发布时间】:2020-11-20 10:38:42
【问题描述】:
我下面的代码示例是一个对给定数组中的每个数字进行四舍五入的化简器。
type Values = [number, number];
export function roundValues(input: Values): Values {
return input.reduce((all, current) => [...all, current], []);
}
但是,它给出了错误TS2322: Type 'number' is not assignable to type 'Values'。知道如何使这个减速器与适当的类型一起工作吗?
在切换到元组类型之前,我之前的代码看起来像下面的代码示例。我不确定它是否正确实现,因为我是 TypeScript 的新手,但它从来没有给我任何错误。我希望 number[] 和 [number, number] 类型基本相同(除了它们可能的长度)并且不会在这里造成任何问题。
type Values = number[];
export function roundValues(input: Values): Values {
return input.reduce<Values>((all, current) => [...all, current], []);
}
【问题讨论】:
-
问题是很难隐式输入。您确定要通过
.reduce执行此操作吗?因为听起来您只想对每个值进行操作,所以.map是惯用的选择并且它应该正确处理类型而不需要任何东西。 -
您的代码不符合元组的规则:
Type '[number, number, number]' is not assignable to type 'Values'. Source has 3 element(s) but target allows only 2。你最好按照 VLAZ 的建议使用map。 -
@VLAZ @entiendoNull 是的,你是对的,它应该是
map。它曾经删除条目,但现在不再。但是,我仍然遇到同样的问题,并且无法让Array.map使用元组并获得完全相同的错误消息。能否请您提供一个代码示例?
标签: javascript typescript tuples