接口的语法让我感到困惑。它看起来很重载,但是当我尝试使用任一签名创建函数时,编译器告诉我缺少另一个签名。目的是模拟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)
}
})
或者在较新版本的打字稿中,您可以使用函数声明,并直接在与声明相同的范围内分配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