我开始使用 redux 工具包,但是当我尝试使用参数分派操作时,我收到来自 IDE 的警告:
“参数类型 {...} 不可分配给参数类型 {payload: {...}}”
我猜它认为状态应该是第一个参数。
有什么办法可以纠正这个问题吗?
编辑: 我找到了针对此特定问题的临时解决方案。 基本上,我所做的是将这些操作从文件中移出。
如果之前我有:
// reducer.js
const state = createSlice({
// ...
reducers: {
handleNumber(state, action){}
}
})
export const { handleNumber } = state.actions
export default state.reduer
现在我有:
// reducer.js
export const state = createSlice({
// ...
reducers: {
handleNumber(state, action){}
}
})
export default state.reducer
// actions.js
import { state } from './reducer'
export const { handleNumber } = state.actions
正如评论中所说。如果这些名称位于同一文件中,Webstorm 似乎会进行模式匹配。但如果它们位于单独的文件中,则会查看打字稿定义。
但是它提出了另一个问题,现在当我按住 Ctrl 键并单击
actions.js
中的函数名称时,它不会转到该函数,而是导航到类型声明。
这里是 RTK 联合维护者。这看起来很奇怪,而且绝对应该有效。 我想更深入地研究这一点。您能否创建一个包含此问题的复制存储库并将其发布到我们的 github 问题跟踪器?
我也遇到过类似的问题,我不确定是什么导致了问题,但我发现删除/重命名您的(隐藏)
.idea
文件夹很有用。之后重新启动 Webstorm,它应该会生成一个可以工作的新 .idea
文件夹。
所以问题似乎是 Webstorm IDEA 默认设置中的某些内容导致了此问题。如果您不确定是否要保留某些设置,请务必先重命名 .idea 文件夹。
希望这有效!
例如,您可以使用不同的名称导出操作
const exmapleSlice = createSlice({
name: 'exmapleSliceId',
initialState: exmapleSliceInitialState,
reducers: {
_changeSomeField(state, action){
state.someField = action.payload;
}
}
});
export const {
_changeSomeField: changeSomeField,
} = exmapleSlice.actions;
我遇到了同样的问题,但删除 .idea 并重新启动 ide 就可以了。
我在安装 @reduxjs/toolkit 包并重新启动打字稿编译器时遇到了同样的问题。