typescript - Fonksiyon sarmalayıcı genel tür belirleme


function callbackWrapper<T = string>(cb?: () => T): T  {
    return cb?.() ?? 'default value';
  }
 
const a = callbackWrapper(() => 7); // a should be number
const b = callbackWrapper(() => true); // b should be boolean
const c = callbackWrapper(() => 'string'); // c should be string
const d = callbackWrapper(); // d should be string ('default value')

Fonksiyon callbackWrapper başlık tiplerini nasıl değiştirebilirim, böylece dönüş tipi hata vermez

Dönüş türünü cast etmeyi denedim, işe yaradı, ama bir kez daha, "7 as unknown as string[]" ile herhangi bir şeyi cast edebilirsiniz ve işe yarar. Yani bu bir çözüm değil.

Cevap #1

callbackWrapper, parametre tipi T tarafından verilen herhangi bir türü döndürebileceğinden, dönüş türünün 'varsayılan değer' ile uyumsuz olması mümkündür.

Bunun yerine, T ve 'varsayılan değer' (veya string) döndürmeyi beklediğinizi açıkça belirtmelisiniz:

function callbackWrapper<T = string>(cb?: () => T): T|'default value'  {
  return cb?.() ?? 'default value';
}