typescript - 为什么 RematchDispatch 在存在同名的 reducer 和 effect 时会给出 `never` 类型?
问题描述
我刚刚使用 Rematch 从 typescript 4.1.2 升级到 4.3.2。使用这些复赛包:
- “@rematch/core”:“2.0.1”
- “@重新匹配/选择”:“3.0.1”
我遇到了一个打字稿错误:Type never
has 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 之后调用。
这似乎是一个有效的案例,它在我的项目中一直有效,直到这次打字稿升级,所以这个问题可能与重新匹配和打字稿混合有关。
你能帮我解决这个问题吗?我做错了什么?
提前致谢!
解决方案
我是塞尔吉奥,复赛维护者!
看起来你发现了我们打字系统的问题,实际上 TypeScript 从 4.1 升级到 4.3 改变了它处理几种情况的方式,这使得 Rematch 团队有必要进行调整。
我们已经在着手解决这个问题:https ://github.com/rematch/rematch/issues/912 ,而且我们已经引入了一个 Github Action 来测试 Typescript@next 版本的类型测试,这样我们就可以解决这个问题TypeScript 发布他的马厩之前的问题。
一种可能的解决方法是,以不同的方式命名您的效果和减速器,例如效果的增量和减速器的大写增量。
无论如何,这应该是固定的,我们已经在努力了:)
推荐阅读
- wpf - 安装或更新 WPF 应用程序时如何清除密钥?
- .net-core - Travis:E:无法找到包 dotnet-sdk-2.0.0
- android - 如何在 BottomSheetDialogFragment 中使用 getViewLifecycleOwner()
- python - 使用 route53domains 进行 boto3 分页
- reactjs - 如何显示区块链合约调用的时间?
- c - 二维数组和指针
- google-bigquery - 如何从 BigQuery API 获取列名?
- python - 在每行开头添加 2 个空格的文本标记
- anomaly-detection - 何时在 Azure Anomaly Detector 中使用“/entire”与“/last” API?
- python - 为什么我的快速排序程序不能正确排序项目?