J'écris une fonction TypeScript et mon IDE me dit que le résultat de .shift() peut être indéfini, ce qui entraîne davantage d'avertissements de type...
Voici le 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 }
Maintenant, je comprends que cet avertissement a du sens lorsque vous ne pouvez pas être sûr s'il y a des éléments dans le tableau, auquel cas .shift() renverra undéfini. Mais dans ce cas, ma boucle while ne s'exécute que lorsque temp.length est vrai, auquel cas je sais que temp.shift() renverra une valeur au lieu d'undéfini... est-ce que j'ai raté quelque chose ?
Une méthode générique pour
shift
被定义为Array
et porte la signature suivante :Array<T>.shift(): T |未定义
Donc, que votre code cible
temp.length
断言,当您调用shift
ou non, vous devez vous attendre au type de retour :T |未定义
Il vous suffit d'ajouter une valeur par défaut :
Il en va de même pour
temp.pop()
.C'estts-playground