能否在TypeScript import语句中直接添加类型断言适配Jest Mock类型?
你之前的写法报错的核心原因是:ES模块的import标准语法不支持在解构导入的位置直接添加类型注解,因此你写的第一个冒号会触发TS1005语法错误。
以下是可行的单行实现方案:
方案1:基于require的整体类型断言(最简洁)
直接对require返回的模块对象做整体类型断言后解构,一行即可完成需求:
const { createUrl, getToken } = require('./fooApi') as { createUrl: jest.Mock, getToken: jest.Mock };
方案2:ES模块环境兼容写法
如果你的项目禁用CommonJS语法、仅允许使用ES模块导入,可使用以下单行写法:
import * as fooApi from './fooApi'; const { createUrl, getToken } = fooApi as Record<'createUrl'|'getToken', jest.Mock>;
方案3:Jest官方推荐写法
使用Jest内置的jest.mocked工具方法做类型转换,不需要手动编写断言的类型结构,可维护性更高:
import { createUrl, getToken } from './fooApi'; const [mockedCreateUrl, mockedGetToken] = [jest.mocked(createUrl), jest.mocked(getToken)];
注:
jest.mocked是Jest 27及以上版本内置的类型工具,会自动将传入的mock对象转换为对应的jest.Mock类型,适配绝大多数场景。
内容的提问来源于stack exchange,提问作者jcollum
相关产品推荐
相关产品推荐

