【问题标题】:Typescript map array of objects giving error: property '(property)' does not exist on type object [duplicate]Typescript映射对象数组给出错误:类型对象上不存在属性“(属性)”[重复]
【发布时间】:2021-06-19 10:37:17
【问题描述】:

我在 React 项目中使用 typescript 并遍历对象数组以返回组件。

我在应用程序中得到了预期的结果,在控制台中没有错误,但在 VSCode 中我得到了这个错误:Property 'amount' does not exist on type 'object'. 对于我在地图中引用的每个属性。

这里是sn-p的代码:

{recentHistory.map((item) => {
    if (item.type === 'ADD') {
        return <AddItem amount={item.amount} memo={item.memo} />
    } else if (item.type === 'SUBTRACT') {
        return <SubtractItem amount={item.amount} memo={item.memo} />
    }
})}

还有 VSCode 中的截图。

VSCode snippet

这再次产生了预期的输出并且效果很好,VSCode 只是抛出了这些警告。

【问题讨论】:

  • recentHistory 是如何定义和填充的?
  • 您最近的历史是如何输入的?看来您正在使用对象类型而不是定义自定义接口
  • 答案总是把它修得更高。现在你的recentHistory 的类型为object[]。如果它具有正确的类型,那么您无需在 .map 回调中执行任何操作。
  • recentHistory 上面是 object[] 类型,应该是别的吗?

标签: reactjs typescript visual-studio-code


【解决方案1】:

为表单项定义接口

interface Item {
  amount: number;
  memo: string;
  type: string;
}

现在,recentHistory 是对象数组类型,你可能在某处有这样的代码:

let recentHistory = [];

您需要更改声明以保存 Item 类型的数组:

let recentHistory: Array<Item> = [];

学分:Linda Paiste

【讨论】:

  • “定义接口”是正确的。在回调中分配类型是对应该在更高层修复的问题的创可贴解决方案(在我们还没有看到的代码中)。 recentHistory 数组应键入为Item[]。如果是,那么item 将自动获得Item 类型。
  • 啊...我不应该这么快回答。我会编辑它
猜你喜欢
  • 2021-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-07
  • 2018-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多