I am trying to figure out how to define type for Array which has both Array and a number.
input: [[2,7,11,15], 9]
// I tried
input: Array<Array<number> | number>
However, when I use this with spread operator then it throws an error A spread argument must either have a tuple type or be passed to a rest parameter.
tests.forEach((test) => {
console.log(twoSumHashMap(...test.input))
})
const twoSumHashMap = (nums, target) => {
let map = new Map(), required;
for(let i = 0; i<nums.length; i++) {
required = target - nums[i];
if(map.has(required)) {
return [map.get(required), i]
} else {
map.set(nums[i], i);
}
}
}
const tests: Array<{input: Array<Array<number> | number>, expected: Array<number>}> = [
{input: [[2,7,11,15], 9], expected: [0,1]},
{input: [[3,2,4], 6], expected: [1,2] },
{input: [[3,3], 6], expected: [0,1] }
]
Workaround
Perhaps I don't need to use spread operator here and can simply use this since input will always be 2 element.
tests.forEach((test) => {
console.log(twoSumHashMap(test.input[0], test.input[1]))
})
Is there a better pattern to use typescript here?