promise - Bu TypeScript arayüzünün bir fonksiyon örneğini nasıl oluşturabilirim?


Arayüzün sözdizimi beni kafamı karıştırdı. Fazla yüklenmiş gibi görünüyor ama herhangi bir imza ile bir fonksiyon oluşturmaya çalıştığımda derleyici diğer imzanın eksik olduğunu söylüyor. Amaç, Jest birim testi için fonksiyonu taklit etmek.

interface SearchResultSetEachFunction {
  promise(callback: (result: Result) => boolean): Promise<boolean>;
  (callback: (result: Result) => boolean): void;
}

Cevap #1

Aşırı yüklenmiş değil, ayrıca promise adlı bir özelliğe sahip bir fonksiyon. Böyle bir nesne oluşturmak için Object.assign kullanabilirsiniz:

let fn: SearchResultSetEachFunction = Object.assign(function (callback: (result: Result) => boolean): void {

}, {
    promise(callback: (result: Result) => boolean): Promise<boolean> {
      return Promise.resolve(false)
    }
})

Oyun Alanı Bağlantısı

Veya TypeScript'in daha yeni sürümlerinde, bir fonksiyon bildirimi kullanabilir ve bildirimin yapıldığı aynı kapsamda promise üyesini doğrudan atayarak TS'nin bunu yeni bir üye olarak tanımasını sağlayabilirsiniz:

function mockSearchResultSetEachFunction(callback: (result: Result) => boolean): void {

}
mockSearchResultSetEachFunction.promise = function (callback: (result: Result) => boolean): Promise<boolean> {
  return Promise.resolve(false)
}

let fn: SearchResultSetEachFunction = mockSearchResultSetEachFunction

Oyun Alanı Bağlantısı