const [summaryData, setSummaryData] = useState({}); <ProTable.Summary.Cell index={2}>{summaryData && summaryData.batteryOperationCabinetTotal}</ProTable.Summary.Cell> <ProTable.Summary.Cell index={3}>{summaryData && summaryData.batteryOperationUserBindingTotal}</ProTable.Summary.Cell> 报错Property 'batteryOperationCabinetTotal' does not exist on type '{}'怎么解决 以及代码优雅
时间: 2024-04-16 07:27:03 浏览: 77
这个报错是由于在初始状态下,`summaryData` 的类型被推断为一个空对象`{}`,而 `batteryOperationCabinetTotal` 和 `batteryOperationUserBindingTotal` 属性并不存在于空对象上。为了解决这个问题,你可以为 `useState` 的初始状态提供一个类型注解,或者在使用 `summaryData.batteryOperationCabinetTotal` 和 `summaryData.batteryOperationUserBindingTotal` 之前添加条件检查。
方法一:为 `useState` 添加类型注解
```typescript
interface SummaryData {
batteryOperationCabinetTotal?: number;
batteryOperationUserBindingTotal?: number;
}
const [summaryData, setSummaryData] = useState<SummaryData>({});
```
这样,`summaryData` 的类型会被明确为一个包含可选的 `batteryOperationCabinetTotal` 和 `batteryOperationUserBindingTotal` 属性的对象。
方法二:添加条件检查
```jsx
<ProTable.Summary.Cell index={2}>
{summaryData.batteryOperationCabinetTotal !== undefined && summaryData.batteryOperationCabinetTotal}
</ProTable.Summary.Cell>
<ProTable.Summary.Cell index={3}>
{summaryData.batteryOperationUserBindingTotal !== undefined && summaryData.batteryOperationUserBindingTotal}
</ProTable.Summary.Cell>
```
通过使用条件检查,如果 `summaryData` 不存在或者 `batteryOperationCabinetTotal` 或 `batteryOperationUserBindingTotal` 不存在,就不会访问这些属性。
关于代码优雅性的问题,可以考虑使用可选链操作符(optional chaining)来简化条件检查:
```jsx
<ProTable.Summary.Cell index={2}>
{summaryData?.batteryOperationCabinetTotal}
</ProTable.Summary.Cell>
<ProTable.Summary.Cell index={3}>
{summaryData?.batteryOperationUserBindingTotal}
</ProTable.Summary.Cell>
```
可选链操作符`?.`可以在访问属性之前进行条件检查,如果属性不存在,表达式会返回`undefined`,避免了显式的条件检查。
希望对你有帮助!如果还有其他问题,请随时提问。
阅读全文