Как я могу создать экземпляр функции этого интерфейса TypeScript? - PullRequest
3 голосов
/ 29 января 2020

Синтаксис интерфейса меня запутал. Это выглядит перегруженным, но когда я пытаюсь создать функцию с любой подписью, компилятор говорит мне, что другая подпись отсутствует. Цель состоит в том, чтобы макетировать функцию для юнит-теста Jest.

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

1 Ответ

2 голосов
/ 29 января 2020

Он не перегружен, это функция, которая также имеет свойство с именем promise. Вы можете использовать Object.assign для создания такого объекта:


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

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

Playground Link

Или в более новых версиях машинописного текста вы можете использовать объявление функции и напрямую назначить promise член в той же области видимости, что и объявление, чтобы ts распознал его как новый член:


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

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

let fn: SearchResultSetEachFunction = mockSearchResultSetEachFunction

Playground Link

...