在Jest和TypeScript中使用可选参数模拟函数

在Jest和TypeScript中使用可选参数模拟函数,typescript,jestjs,Typescript,Jestjs,我正在用TypeScript编写Jest测试,我想为如下函数创建一个强类型模拟: function download( options: DownloadOptions, callback?: (downloadId: number) => void ): void; download.mockImplementation( ( options: DownloadOptions, callback: (downloadId: number) => voi

我正在用TypeScript编写Jest测试,我想为如下函数创建一个强类型模拟:

function download(
  options: DownloadOptions,
  callback?: (downloadId: number) => void
): void;
download.mockImplementation(
  (
    options: DownloadOptions,
    callback: (downloadId: number) => void,
  ) => callback(0),
)
请注意,回调是可选的。如果我使用
jest.Mock
来强制转换模拟函数

const mockDownload = jest.fn() as jest.Mock<void, [
  DownloadOptions,
  ((downloadId: number) => void)?
]>
。。。我得到TS错误2345:

类型为“(options:DownloadOptions,callback:(downloadId:number)=>void)=>void”的参数不能分配给类型为“(options:DownloadOptions,callback?:((downloadId:number)=>void)|未定义)=>void”的参数

参数“callback”和“callback”的类型不兼容

类型“((下载ID:number)=>void)|未定义”不可分配给类型“(下载ID:number)=>void”

类型“未定义”不可分配给类型“(downloadId:number)=>void”


使用
jest.MockedFunction
,从mock实现函数中删除类型,并可选地调用回调

const mockDownload=jest.fn()作为jest.MockedFunction
mockDownload.mockImplementation((选项,回调)=>callback?(0))

我在键入此问题时找到了答案,但希望其他人能从中受益。