我試圖弄清楚如何為同時具有 Array 和數字的 Array 定義型別。
input: [[2,7,11,15], 9]
// I tried
input: Array<Array<number> | number>
但是,當我將它與擴展運算子一起使用時,它會引發錯誤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] }
]
解決方法
也許我不需要在這里使用擴展運算子并且可以簡單地使用它,因為輸入將始終是 2 個元素。
tests.forEach((test) => {
console.log(twoSumHashMap(test.input[0], test.input[1]))
})
在這里使用打字稿有更好的模式嗎?
uj5u.com熱心網友回復:
twoSumHashMap只需要兩個引數。陣列的大小可能不是 2,因此您應該明確鍵入input包含兩個專案的元組(TS 游樂場):
input: [number[], number]
如果找不到兩個數字和輸入型別(TS playground),您的函式也應該有一個回傳值:
const twoSumHashMap = (nums: number[], target: number) => {
const map = new Map();
for(let i = 0; i<nums.length; i ) {
const required = target - nums[i];
if(map.has(required)) {
return [map.get(required), i]
}
map.set(nums[i], i);
}
return [null, -1];
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/462372.html
標籤:打字稿
上一篇:從物件陣列中洗掉鍵和值
