TypeScript Redux:如何使用类型安全操作减少样板



我正在使用带有类型安全操作的打字稿。 我的代码库有很多重复的代码,如下所示: 我看过类似的问题,但找不到答案。

如何减少样板。

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

鉴于该库已经设计为减少样板代码,您越能坚持使用 API,您需要编写的样板代码就越少。 如果使用内置的createReducerAPI,则有一种方法可以避免将操作类型定义为字符串。 也就是说,它们是从createAction返回的动作创作者推断出来的。

您将它们分开似乎意味着您正在使用自己的化简器,这几乎可以肯定是您还要导出所有FeatureXAction类型的原因。 这可以最后完成,而不是单独完成,但实际上只会为每个文件保存一行,并且您仍然需要在最后聚合它们。 所有这些都会增加冗长和样板。

在 typesafe 操作之前,我们的样板文件甚至比您还要多,因为我们的每个操作都由一个接口定义,然后每个操作创建者都返回该接口的实现。 虽然它非常明确,但它非常冗长。

最新更新