Maison  >  Questions et réponses  >  le corps du texte

Est-il possible que .shift() renvoie undéfini ?

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粉461599845P粉461599845259 Il y a quelques jours339

répondre à tous(1)je répondrai

  • P粉668804228

    P粉6688042282024-02-04 09:33:31

    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

    répondre
    0
  • Annulerrépondre