reactjs - Typescript React无法在对象内找到属性
问题描述
很抱歉标题令人困惑,但我不知道如何更好地命名它。
我正在从食物 api 中获取一些数据并将其存储到一个状态中。
const [data, setData] = useState<null | {}>(null);
上面的有状态变量被初始化为 null,然后在获取完成后变为一个对象,该对象setData(apiData)
具有一个名为餐的属性,它是一个对象数组
我正在尝试将获取的数据传递给名为 Card 的组件,但我收到此错误:“Property 'meals' does not exsist on type '{}'”
data !== null && <Card data={data?.meals} />
我认为它可能无法识别对象上的属性“meals”,因为当它尝试访问它时数据没有完成获取,所以我决定检查数据是否不等于 null,但这也不起作用......
知道我做错了什么吗?我是打字稿的新手。先感谢您。
解决方案
该类型的{}
意思是“没有属性的对象”。因此,您是说它没有meals
属性,也没有其他属性。您需要提供与数据外观相匹配的类型。我不确切知道该类型会是什么样子,因此您需要填写它的属性,但我编写的一些属性的示例是:
interface Meal {
mealId: string;
calories: number;
}
interface Data {
id: string;
meals: Meal[];
}
// ... used like:
const [data, setData] = useState<null | Data>(null);
// ... and:
data !== null && <Card data={data.meals} />
推荐阅读
- typescript - 类型脚本:window.open().document.write() 是“可能为空”
- gitlab-ci - git-secret:gpg:[不知道]:部分长度对 gitlab ci 作业中的数据包类型 20 无效
- r - 在 R 中创建聚类图;添加计数和集群名称以绘制
- asp.net - 会话已更改
- flutter - 未处理的异常:“Null”类型不是“Map”类型的子类型
' 在类型转换中 - python - 如何在 Python 中测试某些函数调用的返回值
- node.js - React JS socket.io-client 打开多个连接
- python - 如何在不丢失python中移位的位的情况下向左或向右移动二进制数的位
- python - 在 pandas 中搜索所有没有匹配 ID 字符串的行的最快方法
- code-coverage - Xcode13 未定义符号:___gcov_flush