我正在编写一个 TypeScript 函数,我的 IDE 告诉我,.shift() 的结果可能是未定义的,这会导致更多类型警告......
这是代码:
function accumulateProofs( proofs: Proof[], requiredAmount: Number, strategy: 'middle' | 'ascending' | 'descending', ): Proof[] { const result:Proof[] = []; const temp = proofs.slice(); let total = 0; switch (strategy) { case 'middle': { while (temp.length && total < desired) { const first = temp.shift(); total += first.amount; result.push(first); if (total >= desired) { break; } const last = temp.pop(); total += last; result.push(last); } } } return result }
现在我明白,当您无法确定数组中是否有任何元素时,此警告是有意义的,在这种情况下 .shift() 将返回未定义。但在这种情况下,我的 while 循环仅在 temp.length 为真时运行,在这种情况下我知道 temp.shift() 将返回一个值而不是未定义...我错过了什么吗?
P粉6688042282024-02-04 09:33:31
shift
被定义为 Array
的通用方法,并具有以下签名:
Array<T>.shift(): T |未定义
因此,无论您的代码是否针对 temp.length
断言,当您调用 shift
时,您都必须期望返回类型:
T |未定义
您只需添加一个默认值:
const first = temp.shift() || { amount: 0 }
对于 temp.pop()
也是如此。
这里是ts-游乐场