如何创建此 TypeScript 接口的函数实例?

How can I create a function instance of this TypeScript interface?

界面的语法让我很困惑。它看起来超载了,但是当我尝试使用任一签名创建函数时,编译器告诉我缺少另一个签名。目标是模拟 Jest 单元测试的功能。

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

它没有重载,它是一个函数,还有一个名为 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