【问题标题】:React TypeScript how to iterate through an object?React TypeScript 如何遍历一个对象?
【发布时间】:2020-08-02 04:00:43
【问题描述】:

这是特定于 React 的。

我有一个这样的对象:

interface Profile {
    name: string;
    title: string;
}

const NewPerson: Profile = {
    name: "John Smith",
    title: "Software Engineer"
}

我想在 React 组件中返回该对象的键值对,如下所示:

function MyFunc() {
  return (
   <div>
    {
      Object.keys(NewPerson).map((key) => (
        <div>{key}: {NewPerson[key]}</div>
      ))
     }
    </div>
  )
}

但是,我可以访问它们 key,但不能访问它的值。我有这个错误:

TS:元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引“配置文件”类型。 在“配置文件”类型上找不到具有“字符串”类型参数的索引签名。

我尝试使用Object.valuesfilter,但无法修复。

【问题讨论】:

标签: javascript reactjs typescript


【解决方案1】:

试试

interface Profile {
    name: string;
    title: string;
    [key: string]: string;
}
const NewPerson: Profile = {
    name: "John Smith",
    title: "Software Engineer"
}
function MyFunc() {
  return (
   <div>
    {
      Object.keys(NewPerson).map((key: keyof Profile) => (
        <div>{key}: {NewPerson[key]}</div>
      ))
     }
    </div>
  )
}

【讨论】:

  • 感谢您的建议,但我收到此错误:``` 类型参数 '(key: "title" | "name") => JSX.Element' is not assignable to parameter of类型'(值:字符串,索引:数字,数组:字符串 [])=> 元素'。参数“key”和“value”的类型不兼容。类型“字符串”不可分配给类型“标题”| “名称”'```
【解决方案2】:

将 Object.entries 与 forEach 循环结合使用怎么样,如下所示:

Object.entries(NewPerson).forEach(([key, value]) => {
   <div>{key}: {value}</div>
})

【讨论】:

  • 感谢您的建议,但 forEach 在 React 中不起作用。
【解决方案3】:

我遇到了同样的问题并这样解决了:

Object.entries(NewPerson).map(([key, value]) => {
 <div>{key}: {value}</div>
})

【讨论】:

    猜你喜欢
    • 2020-05-23
    • 2020-04-30
    • 2021-08-27
    • 2020-01-23
    • 2021-06-02
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多