Rumah  >  Soal Jawab  >  teks badan

Adakah mungkin .shift() mengembalikan undefined?

Saya sedang menulis fungsi TypeScript dan IDE saya memberitahu saya bahawa hasil .shift() mungkin tidak ditentukan, yang menghasilkan lebih banyak jenis amaran...

Ini kodnya:

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
}

Sekarang saya faham bahawa amaran ini masuk akal apabila anda tidak dapat memastikan sama ada terdapat sebarang elemen dalam tatasusunan, dalam kes ini .shift() akan kembali tidak ditentukan. Tetapi dalam kes ini gelung while saya hanya berjalan apabila temp.length adalah benar, dalam hal ini saya tahu temp.shift() akan mengembalikan nilai dan bukannya undefined... adakah saya kehilangan sesuatu?

P粉461599845P粉461599845258 hari yang lalu330

membalas semua(1)saya akan balas

  • P粉668804228

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

    Kaedah generik untuk

    shift 被定义为 Array dan mempunyai tandatangan berikut:

    Array<T>.shift(): T |未定义

    Jadi tidak kira sama ada kod anda menyasarkan temp.length 断言,当您调用 shift atau tidak, anda mesti mengharapkan jenis pulangan:

    T |未定义

    Anda hanya perlu menambah nilai lalai:

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

    Begitu juga dengan temp.pop().

    Ini ialahts-taman permainan

    balas
    0
  • Batalbalas