Heim > Fragen und Antworten > Hauptteil
Ich schreibe eine TypeScript-Funktion und meine IDE sagt mir, dass das Ergebnis von .shift() möglicherweise undefiniert ist, was zu mehr Typwarnungen führt ...
Das ist der Code:
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 }
Jetzt verstehe ich, dass diese Warnung sinnvoll ist, wenn Sie nicht sicher sein können, ob das Array Elemente enthält. In diesem Fall gibt .shift() undefiniert zurück. Aber in diesem Fall läuft meine while-Schleife nur, wenn temp.length wahr ist. In diesem Fall weiß ich, dass temp.shift() einen Wert anstelle von undefiniert zurückgibt ... übersehe ich etwas?
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-游乐场