Est-il possible que .shift() renvoie undéfini ?
P粉461599845
P粉461599845 2024-02-03 19:55:25
0
1
377

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 ?

P粉461599845
P粉461599845

répondre à tous(1)
P粉668804228

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 :

const first = temp.shift() || { amount: 0 }

Il en va de même pour temp.pop().

C'estts-playground

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal