无法复现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
相关产品推荐
相关产品推荐

