我正在使用带有Typesafe-actions的打字稿。 我的代码库中有很多重复的代码,如下所示: 我浏览了类似的问题,但找不到答案。
如何减少样板。
import { action, ActionType, createAction } from 'typesafe-actions';
interface ModelA {
stuff: string
}
export enum FeatureAActionTypes {
Load = '[FeatureA] Load',
Success = '[FeatureA] Success',
Fail = '[FeatureA] Fail',
Reset = '[FeatureA] Reset'
}
export const FeatureAActions = {
load: createAction(FeatureAActionTypes.Load),
success: (response: ModelA[]) => action(FeatureAActionTypes.Success, response),
fail: (error: string) => action(FeatureAActionTypes.Fail, error),
reset: createAction(FeatureAActionTypes.Reset)
};
export type FeatureAAction = ActionType<typeof FeatureAActions>;
interface ModelB {
differentStuff: string
}
export enum FeatureBActionTypes {
Load = '[FeatureB] Load',
Success = '[FeatureB] Success',
Fail = '[FeatureB] Fail',
Reset = '[FeatureB] Reset'
}
export const FeatureBActions = {
load: createAction(FeatureBActionTypes.Load),
success: (response: ModelB[]) => action(FeatureBActionTypes.Success, response),
fail: (error: string) => action(FeatureBActionTypes.Fail, error),
reset: createAction(FeatureBActionTypes.Reset)
};
export type FeatureBAction = ActionType<typeof FeatureBActions>;
答案 0 :(得分:0)
鉴于该库已被设计为减少样板代码,因此您坚持使用API的次数越多,所需编写的样板代码就越少。如果您使用内置的createReducer
API,则可以避免将操作类型定义为字符串的需要。也就是说,它们是根据createAction
返回的动作创建者推断出来的。
您要保留那些单独的似乎暗示您正在使用自己的reducer,这几乎可以肯定是为什么您还导出了所有FeatureXAction
类型的原因。这可以在最后完成,而不是单独完成,但实际上每个文件只能为您节省一行,而您仍然需要在最后进行汇总。所有这些都会增加详细程度和样板。
在类型安全动作之前,我们的样板要比您更多,因为每个动作都是由接口定义的,然后每个动作创建者都返回该接口的实现。虽然很明确,但却很冗长。