You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法复现Jest自定义Matcher文档示例:属性不存在于Expect类型上

你仅扩展了jest.Matchers接口,该接口仅负责expect(接收值).自定义Matcher调用场景的类型校验,你需要的expect.自定义Matcher、expect.not.自定义Matcher调用场景,需要额外扩展jest.Expect和jest.ExpectNot两个接口。

解决步骤

1. 补充完整的全局类型声明

export {}

declare global {
  namespace jest {
    // 适配 expect(xxx).toBeWithinRange() 调用场景
    interface Matchers<R> {
      toBeWithinRange(floor: number, ceiling: number): R;
    }
    // 适配 expect.toBeWithinRange() 调用场景
    interface Expect {
      toBeWithinRange(floor: number, ceiling: number): unknown;
    }
    // 适配 expect.not.toBeWithinRange() 调用场景
    interface ExpectNot {
      toBeWithinRange(floor: number, ceiling: number): unknown;
    }
  }
}

2. 确保声明文件被TS正确加载

  • 将上述声明代码保存为后缀为.d.ts的文件,比如jest-custom-matchers.d.ts,可放在项目根目录或src/types目录下
  • 检查tsconfig.json的配置,确保声明文件路径被include配置覆盖,示例配置参考:
{
  "compilerOptions": {
    "typeRoots": ["node_modules/@types", "./src/types"]
  },
  "include": ["src/**/*", "jest-custom-matchers.d.ts"]
}

3. 重启TS语言服务

编辑器内按快捷键唤起命令面板,执行「TypeScript: Restart TS Server」重启类型服务后,报错即可消失,两种调用方式都可正常使用。

内容的提问来源于stack exchange,提问作者HenriC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 05:36:03