我正在尝试将我的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);
谢谢。
答案 0 :(得分:2)
这应该可以解决问题
const twoArgs = [2,3,4].slice(0, 2) as [number, number];
functionThatRequiresTwoArgs(...twoArgs);
slice
函数返回一个未定义长度的数组(如果您知道它将变为一定的长度,则该事件),因此无法将twoArgs
定义为已定义的长度。但是,您可以使用as
关键字进行类型转换。