javascript - Typescript geri çağırma fonksiyonunun tipini doğru şekilde belirleyemiyor


Bu TypeScript kodunu çalıştırdıktan sonra, bir geri çağırma fonksiyonunun item parametresinde bir hata alıyorum. Sorunun ne olduğunu bulamıyorum.

function tap<T>(array:T[],callback:(array:T[])=> T ):T{
    return callback(array)
}


const myResult = tap<number>([1,2,3,4],(item)=>{
    if(item.length !==0 ){
        return item.pop()
    }else{
        return 1
    }

})

hata çıktısı

Argument of type '(item: number[]) => (() => number | undefined) | 10' is not assignable to parameter of type '(array: number[]) => number'.
  Type '(() => number | undefined) | 10' is not assignable to type 'number'.
    Type '() => number | undefined' is not assignable to type 'number'.ts(2345)

Cevap #1

item.pop() undefined döndürebilir. Geri çağırma işlevini şu şekilde değiştirebilirsiniz

const myResult = tap<number>([1,2,3,4], (item) => {
    return item.pop() ?? 1;
})

Eğer dizi boşsa ve pop() undefined döndürürse, geri çağırma fonksiyonu 1 döndürecektir.

Cevap #2

Öğenin tanımsız olabileceğinden şikayet ediyor. Sadece tap'i tap olarak değiştir.

function tap<T>(array: T[], callback: (array: T[]) => T): T {
  return callback(array);
}

const myResult = tap<number | undefined>([1, 2, 3, 4], (item) => {
  if (item.length !== 0) {
    return item.pop();
  } else {
    return 1;
  }
});

İlgili makaleler