reactjs - 打字稿反应redux,类型{}上不存在属性
问题描述
我正在使用 react redux 和 typescript 创建身份验证流程。我设置了我的注册身份验证状态界面和初始状态
export interface User {
id: string;
username: string;
email: string;
social: Social;
userCourses: Course[];
enrolledCourses: Course[];
}
interface AuthState {
isAuth: boolean;
usernamesAndEmails: UsernameAndEmail[] | [];
currentUser: User | {};
isLoading: boolean;
error: object;
}
const signupInitialState: AuthState = {
isAuth: false,
usernamesAndEmails: [],
currentUser: {},
isLoading: false,
error: {},
};
然后我有一个组件,我需要使用 currentUser 状态让用户创建他们的用户名(如果他们使用 google/facebook 注册)。
const { currentUser } = useSelector((state: RootState) => state.auth);
const onSubmit = (data: FormData) => {
dispatch(tryChangeUsername(currentUser, data));
};
但我收到错误(“{} | 用户”类型的参数不可分配给“用户”类型的参数。“{}”类型缺少“用户”类型的以下属性:id、用户名、电子邮件、社交,还有 2 个。)。我不确定我是否需要以不同的方式设置我的界面或初始状态或什么。我认为问题在于当前用户可以是一个空对象(尽管它不会在该组件中,因为该组件将是私有路由),但我不确定如何解决该问题。
解决方案
在使用它的属性之前,您应该检查 currentUser 是类型 User 还是 {}
function isUser(object: User | {}): object is User {
return 'id' in object;
}
let currentUser: User | {};
if (isUser(currentUser)) {
// make something
currentUser.id;
}
推荐阅读
- ios - 从带有或不带有 MFi 的 iOS 设备连接到 USB-C/A 设备的爱好者方式
- sql - 如何将每个“用户”的结果数限制为 5 个,但如果第 5 行的立即值与连续行相同,则允许更多行?
- c# - 贝塞尔路径创建器和第三人称相机的问题
- powershell - 隐藏在控制台中输入的密码 - 批处理脚本
- ruby - 如何在 Ruby 2.2.10 中解析 Square 响应嵌套的键值
- mysql - MySQL 视图 - 来自多个表的计算列返回 NULL
- azure-devops - Azure DevOps REST 调用 - 如何找出我的身份
- jquery - 从本地数据库加载超过 16000 条记录时,mvc angularjs AutoComplete 错误
- javascript - javascript中变量范围的问题
- node.js - 如何对一个文件夹中的多个 .js 文件进行 uglify 并将它们输出到不同的文件夹?