reactjs - 对象可能是“未定义的”。TS2532
问题描述
我不断收到对象可能是“未定义”。TS2532,我知道这是由于将 setViewer 分配给 undefined 所致,我这样做是为了登录匹配,但遇到了另一个问题。现在,我有 2 个数据进入 homeviewer,其中一个是公告,当我尝试访问数据时,它给了我 TS2532 错误。这是下面的代码。我是这些新手,我不知道要为 setViewer ( setViewer: () => undefined
) 更改什么才能使其正常工作。
homeViewer.ts
import { createContext } from 'react';
import { HomeViewer } from '../types/home_viewer';
export interface ViewerContextType {
viewer?: HomeViewer;
setViewer: (home: HomeViewer) => void;
}
export const ViewerContext = createContext<ViewerContextType>({
viewer: {},
setViewer: () => undefined,
});
这需要接口
export interface HomeViewer {
user?: User;
announcements?: Announcement;
}
我使用它的部分
const { viewer } = useContext(ViewerContext);
const data = viewer?.announcements;
console.log(data[0]);
解决方案
如果我理解正确,您的问题是围绕访问特定索引处的元素从data
- 其中data
可能具有值undefined
(根据您的HomeViewer
界面);
export interface HomeViewer {
user?: User;
announcements?: Announcement;
}
对我来说,该Announcement
类型似乎表示某些元素的数组(根据您访问其数据的方式判断),或者undefined
(因为它是可选的)。
这意味着,它肯定不会是Announcement
' 类型声明的实例,因此您必须链接一个可选的访问运算符来访问可能不存在的数组元素?.
:
const { viewer } = useContext(ViewerContext);
const data = viewer?.announcements;
console.log(data?.[0]) // -> Ok!
console.log(data[0]) // -> Err! Object is possibly undefined.
推荐阅读
- javascript - 如果在创建新文档时有一个抛出异常,则回滚两个文档中的持久性?
- python - 将 sounddevice 导入 python 崩溃
- python - 根据指定列中的字符串值条目是否包含子字符串来分隔熊猫数据框
- python-3.x - IDLE 表示每个打印语句末尾的双引号是无效的语法。怎么了?
- mysql - MySql 备份最近更新/插入的数据
- docker - 两个 docker 容器无法通信
- github - github 操作 - npm 安装失败,退出代码 1
- laravel - Laravel - 注册后重定向到带有数据的路由
- github - “Fetch”的 DataPower SSL 配置导致“无法获取 SSL 配置文件”
- node.js - 如果 NodeJS 同时收到 n 个请求,它将首先服务哪个请求?