如何在打字稿中键入属性作为forEach上的键?

时间:2019-09-09 20:59:34

标签: typescript

这是我的代码:

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>>
    );

开玩笑。模拟有效

1 个答案:

答案 0 :(得分:1)

BoadsSagasKeys 不是具有键的类型,是字符串常量并集的类型别名,因此 {{1 }}无效 keyof将返回BoadsSagasKeys的键的并集。只需:keyof BoadsSagasKeys。 (感谢Mike的改正!) 这意味着您所做的是尝试使用stringkeyof BoadsSagasKeys === keyof string编制索引,这可能是错误的,因为typeof Api['boards']不会扩展keyof string

我相信你的意思是这样:

Api['boards']