typescript - 如何在打字稿中键入属性作为 forEach 的键?
问题描述
这是我的代码:
type BoadsSagasKeys = 'createBoard' | 'getBoards' | 'fetchBoard';
beforeEach(() => {
jest.resetAllMocks();
});
Object.keys(Api.boards).forEach((k: string) => {
Api.boards[k as BoadsSagasKeys] = jest.fn() as
jest.Mocked<typeof Api['boards'][keyof BoadsSagasKeys]>; // ERROR on keyof
});
我希望 jest.Mocked 匹配当前键,但这不起作用,在这种情况下如何键入键?
ATM,我通过在 jest.fn() 上不做任何分配并这样做来解决:
(Api.boards.fetchBoard as jest.Mock).mockImplementation(
() =>
Promise.resolve({
data: { board: getFetchedMockBoard(mockBoardData._id) }
}) as Promise<AxiosResponse<any>>
);
作为 jest.Mock 作品
解决方案
BoadsSagasKeys
不是具有键的类型,而是字符串常量联合的类型别名,因此之前的 keyof
语句BoadsSagasKeys
无效keyof BoadsSagasKeys
将返回 的键的联合string
。简单地说:keyof BoadsSagasKeys === keyof string
。(感谢 Mike 的纠正!)这意味着你所做的只是试图用 索引typeof Api['boards']
,keyof string
这可能是一个错误,因为Api['boards']
doesn't extend string
。
我相信你的意思是这样的:
type BoadsSagasKeys = 'createBoard' | 'getBoards' | 'fetchBoard';
beforeEach(() => {
jest.resetAllMocks();
});
Object.keys(Api.boards).forEach((k: string) => {
Api.boards[k as BoadsSagasKeys] = jest.fn() as
jest.Mocked<typeof Api['boards'][BoadsSagasKeys]>; // no `keyof` before `BoadsSagasKeys`
});
推荐阅读
- java - 如何修复 SessionNotCreatedException:尝试运行 Firefox 时无法创建新的远程会话?
- r - 使用 Dataframe of Coefficients 在 R 中进行测试集预测
- architecture - 设计一个向连接用户发送消息的解决方案
- python - PyQt5 - 使用鼠标右键单击可编辑的 QGraphicsTextItem 时程序崩溃
- mongodb - MongoDB 查询显示每个邮政编码的最后更新
- ios - AppleArchive 框架无法正常工作
- powerbi - 如何禁用视觉对象被选中但在鼠标悬停时显示工具提示?
- sql - 使用 order by 更新数据库
- python - 如何在不计算的情况下验证数学表达式语法
- ffmpeg - 当我在 Linux (ubuntu) 上的 C 库中使用 libavformat 和 libavcodec 库时,如何减少 CPU 使用率?