界面的语法让我很困惑。它看起来重载,但是当我尝试创建具有任一签名的函数时,编译器告诉我缺少另一个签名。目标是模拟 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)
}
})
或者在较新版本的 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
关于typescript - 如何创建此 TypeScript 接口(interface)的函数实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59969278/