0

我刚刚使用 Rematch 从 typescript 4.1.2 升级到 4.3.2。使用这些复赛包:

  • “@rematch/core”:“2.0.1”
  • “@重新匹配/选择”:“3.0.1”

我遇到了一个打字稿错误:Type neverhas no call signatures。我查看了第 3 方的代码,发现never当我在同名的特定模型中有减速器和效果时,RematchDispatch 会给出类型。例如:

export const myModel = createModel<RootModel>()({
  state: { ... },
  reducers: {
    myReducer(state, payload: string) { ... }
  },
  effects: dispatch => ({
    myReducer(payload: string, rootState) { ... }
  }
}

并且RematchDispatch<RootModel>['myModel']['myReducer']type 将给出“从不”类型,例如,由于上述打字稿错误,我不能通过 react 组件中的 useDispatch 调用它。

我还检查了文档:https ://rematchjs.org/docs/api-reference/models并找到了这个

与 reducer 共享名称的效果函数在其对应的 reducer 之后调用。

这似乎是一个有效的案例,它在我的项目中一直有效,直到这次打字稿升级,所以这个问题可能与重新匹配和打字稿混合有关。

你能帮我解决这个问题吗?我做错了什么?

提前致谢!

4

1 回答 1

0

我是塞尔吉奥,复赛维护者!

看起来你发现了我们打字系统的问题,实际上 TypeScript 从 4.1 升级到 4.3 改变了它处理几种情况的方式,这使得 Rematch 团队有必要进行调整。

我们已经在着手解决这个问题:https ://github.com/rematch/rematch/issues/912 ,而且我们已经引入了一个 Github Action 来测试 Typescript@next 版本的类型测试,这样我们就可以解决这个问题TypeScript 发布他的马厩之前的问题。

一种可能的解决方法是,以不同的方式命名您的效果和减速器,例如效果的增量和减速器的大写增量。

无论如何,这应该是固定的,我们已经在努力了:)

于 2021-07-06T13:02:29.457 回答