打字稿和固定的数组长度(array.slice)

时间:2020-02-20 09:17:07

标签: typescript

我正在尝试将我的arguments数组的长度固定为2,以便可以将其扩展为需要2个arguments的函数。但是,该数组来自另一个返回类型为number []的数组的切片。

const twoArgs: [number, number] = [2,3,4].slice(0, 2));
//Type 'number[]' is missing the following properties from type '[number, number]': 0, 1

functionThatRequiresTwoArgs(...twoArgs);
//Expected 2 arguments, but got 0 or more.

我找到了解决方案,但我无法以一种简洁的方式清楚地做到这一点。也许打字稿用户可以用一种更好的方法启发我?

const myWorkaround = (t: number[]) => {
  let result: [number, number] = [0, 0];
  t.forEach((value, index) => (result[index] = value));
  return result;
};

const twoArgs: [number, number] = myWorkaround([2,3,4].slice(0, 2));

functionThatRequiresTwoArgs(...twoArgs);


谢谢。

1 个答案:

答案 0 :(得分:2)

这应该可以解决问题

const twoArgs = [2,3,4].slice(0, 2) as [number, number];

functionThatRequiresTwoArgs(...twoArgs);

slice函数返回一个未定义长度的数组(如果您知道它将变为一定的长度,则该事件),因此无法将twoArgs定义为已定义的长度。但是,您可以使用as关键字进行类型转换。