suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Ist es möglich, dass .shift() undefiniert zurückgibt?

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粉461599845P粉461599845289 Tage vor360

Antworte allen(1)Ich werde antworten

  • P粉668804228

    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-游乐场

    Antwort
    0
  • StornierenAntwort