这是我的代码:
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
});
我想开玩笑。模拟匹配当前密钥,但这不起作用,在这种情况下如何键入密钥?
ATM,我不做任何事情在jest.fn()上分配,而是这样做:
(Api.boards.fetchBoard as jest.Mock).mockImplementation(
() =>
Promise.resolve({
data: { board: getFetchedMockBoard(mockBoardData._id) }
}) as Promise<AxiosResponse<any>>
);
开玩笑。模拟有效
答案 0 :(得分:1)
BoadsSagasKeys
不是具有键的类型,是字符串常量并集的类型别名,因此 {{1 }}无效 keyof
将返回BoadsSagasKeys
的键的并集。只需:keyof BoadsSagasKeys
。 (感谢Mike的改正!)
这意味着您所做的是尝试使用string
为keyof BoadsSagasKeys === keyof string
编制索引,这可能是错误的,因为typeof Api['boards']
不会扩展keyof string
。
我相信你的意思是这样:
Api['boards']