启动新应用程序并使用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
,但使用ReturnType
for creator函数的情况更是如此。
spyOn(store, "dispatch" as any).and.callFake((action: MyActionCreatorFunction) => {
expect(action.type).toBe(fetchProductStructureAction.type);
expect(action.property).toBe(expectedProperty);
})
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句