【问题标题】:TS: Redux Actions without typeTS:没有类型的 Redux Actions
【发布时间】:2019-02-25 10:06:44
【问题描述】:

我最近开始在我的 react 项目中使用 Typescript。 我缺少的一项是键入调度和动作创建者。

我使用自己的操作类型基于:https://redux.js.org/recipes/reducing-boilerplate

我的操作编码如下:

export function getXXX(){ 
  return {
    types: [ 
        ActionTypes.GET_XXX, 
        ActionTypes.GET_XXX_SUCCESS, 
        ActionTypes.GET_XXX_ERROR 
    ],
    request: {
        method: 'GET',
        url: `/v1/retrievexxx`
    }
  }    
}

我的问题是缺少类型(显然)并且 ReduxAction TS 类型需要一个类型。

有什么办法可以解决这个问题?

【问题讨论】:

  • 我个人使用typesafe-actions,但这意味着你需要重写你当前的代码
  • 将是一个大规模的重构 :-) ...但是我可以将 baseType GET_XXX 保留为类型,并且只在数组中提供 SUCCESS/ERROR ... 然后我可以使用默认类型键入我的操作...
  • 我将成为第二个 typesafe-actions。其中有很多聪明的东西是普通 TS 用户永远无法复制的。

标签: reactjs typescript redux


【解决方案1】:

我真的建议不要尝试解决此问题,并始终为您的操作提供type。 Redux 类型中的 Action 类型需要它是有原因的:Redux 生态系统的大部分 - 例如开发工具 - 期望它存在,如果不存在就会表现得很奇怪。所以在这里可能不值得违背原则。

【讨论】:

  • 我确实提供了类型,如redux.js.org/recipes/reducing-boilerplate 中所述的数组。中间件通过调度它们来处理请求、成功和失败类型。
  • 啊,我明白了。在这种情况下,重要的是要意识到您调度的对象根本不是 Redux 意义上的 Action - 这完全没问题。这与 redux-thunk 的工作方式相同——你调度一个函数而不是一个动作,但是一旦事情到达实际的商店,它就会是动作。所以你需要做的不是让它看起来像一个动作,而是键入你的中间件,以便dispatch 也接受你的对象类型。我建议查看 redux-thunk 类型以了解如何执行此操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-23
  • 2017-09-18
  • 1970-01-01
  • 2019-01-10
  • 2017-05-13
  • 1970-01-01
  • 2019-08-09
相关资源
最近更新 更多