我是TypeScript新手。我正在尝试将TypeScript与Redux一起使用,但出现以下错误:Property 'user' does not exist on type 'WritableDraft<{ name: string; }>'.
我在Youtube上一步一步地学习教程,但它对我的项目不起作用。
下面是我的代码:
import { createSlice } from '@reduxjs/toolkit';
import React from 'react';
export const userSlice = createSlice({
name: 'user',
initialState: {
name: '',
},
reducers: {
login: (state, action) => {
state = action.payload;
},
logout: (state) => {
state.user = null;
},
},
});
export const { login, logout } = userSlice.actions;
export const selectUser = (state: { user: { user: any } }) => state.user.user;
export default userSlice.reducer;
3条答案
按热度按时间brccelvz1#
user
状态切片的数据形状为{ name: string }
。日志:
snvhrwxg2#
如果你反复检查你的代码,它的罚款。
将redux-toolkit的版本更改为以前的版本,在我的例子中,我使用了
1.8.0
,一切又开始工作了。或者删除节点模块并运行
npm install
或yarn
3xiyfsfu3#
Redux将根据传递给
createSlice
函数的initialState
值推断state
的类型(在您的reducer中),如下所示:在你的reducer中,你会得到一个状态的
WritableDraft
示例作为第一个参数,如下所示:要完成我认为您正在尝试完成的任务,您所要做的就是将
name
变量抽象到user
属性中,如下所示:在这一点上,我建议显式地输入状态和操作负载。
例如:
......在你的还原剂中:
无论如何,您似乎错过了教程中的一些内容,因为在您自己的代码中,您有一个选择器将状态定义为
state: { user: { user: any } }
。像上面这样显式定义状态类型,应该有助于在将来缓解这些问题。