打字稿redux:如何使用typesafe-actions减少样板

时间:2019-08-21 10:11:10

标签: typescript redux typesafe-actions

我正在使用带有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>;

1 个答案:

答案 0 :(得分:0)

鉴于该库已被设计为减少样板代码,因此您坚持使用API​​的次数越多,所需编写的样板代码就越少。如果您使用内置的createReducer API,则可以避免将操作类型定义为字符串的需要。也就是说,它们是根据createAction返回的动作创建者推断出来的。

您要保留那些单独的似乎暗示您正在使用自己的reducer,这几乎可以肯定是为什么您还导出了所有FeatureXAction类型的原因。这可以在最后完成,而不是单独完成,但实际上每个文件只能为您节省一行,而您仍然需要在最后进行汇总。所有这些都会增加详细程度和样板。

在类型安全动作之前,我们的样板要比您更多,因为每个动作都是由接口定义的,然后每个动作创建者都返回该接口的实现。虽然很明确,但却很冗长。