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

问题描述 投票:2回答:1

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

interface SearchResultSetEachFunction {
  promise(callback: (result: Result) => boolean): Promise<boolean>;
  (callback: (result: Result) => boolean): void;
}
typescript promise mocking jestjs netsuite
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.