我正在写一个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()将返回undefined。但是在这种情况下,我的while循环只在temp.length为true时运行,在这种情况下,我知道temp.shift()将返回一个值,而不是undefined...我错过了什么吗?
1条答案
按热度按时间ppcbkaq51#
shift
被定义为Array
的泛型方法,并具有以下签名:Array<T>.shift(): T | undefined
所以不管你的代码是否针对
temp.length
Assert,当你调用shift
时,你必须期待返回类型:T | undefined
你只需要添加一个默认值:
并且对于
temp.pop()
也是如此。这里是一个链接到ts-playground