NgRx:如何声明动作创建者创建的动作的显式类型?

路易斯·阿西图诺

启动新应用程序并使用NgRx的新动作创建者模式后,我发现自己缺少动作的显式类型。例如,当我测试服务时,我想知道它使用正确的属性调度了正确的操作。

如何在TypeScript中保留类型安全性的同时进行此操作?

一个例子:

// What should the '???' in the following line be?
spyOn(store, "dispatch").and.callFake((action: ???) => {
  expect(action.type).toBe(fetchProductStructureAction.type);
  // TypeScript complains here if I don't add the correct type to action
  expect(action.property).toBe(expectedProperty); // <--
})
萨坦时间

您可以Action那里放ngrx/store

这个肯定可以工作。

spyOn(store, 'dispatch').and.callFake((action: Action) => {
  expect(action).toEqual(jasmine.objectContaining({
    type: fetchProductStructureAction.type,
    property: expectedProperty,
  }));
});

如果要将原始类型保留在回调中,则需要将方法强制转换为any,但使用ReturnTypefor creator函数的情况更是如此。

spyOn(store, "dispatch" as any).and.callFake((action: MyActionCreatorFunction) => {
  expect(action.type).toBe(fetchProductStructureAction.type);
  expect(action.property).toBe(expectedProperty);
})

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章