Adakah mungkin .shift() mengembalikan undefined?
P粉461599845
P粉461599845 2024-02-03 19:55:25
0
1
350

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粉461599845
P粉461599845

membalas semua(1)
P粉668804228

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan