typescript - 如何创建此 TypeScript 接口(interface)的函数实例?

标签 typescript promise mocking jestjs netsuite

界面的语法让我很困惑。它看起来重载,但是当我尝试创建具有任一签名的函数时,编译器告诉我缺少另一个签名。目标是模拟 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

或者在较新版本的 typescript 中,您可以使用函数声明并直接在与声明相同的范围内分配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

关于typescript - 如何创建此 TypeScript 接口(interface)的函数实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59969278/

相关文章:

javascript - Node Promises Bluebird Collections API 和 Spread() 问题

python - 捕获标准输出以供以后重播的明智方法?

javascript - Array.prototype.sort 方法更改数组值以及该数组的变量值

javascript - typescript 将字符串文字类型映射为大写

javascript - TypeScript:你能根据函数的参数定义一个返回类型结构吗?

Python 单元测试 - if 语句中的模块未定义

c# - 如何独立于模拟框架使用 Machine.Fakes 模拟 'out' 参数?

typescript - 从 .d.ts 文件导出 "mixed"声明 - Typescript

javascript - Promise.resolve() 在 setTimeout() 中返回一个奇怪的结果

javascript - Promise 的 then 处理程序中的同步代码