Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
深嵌套数组的TypeScript接口_Typescript - Fatal编程技术网

深嵌套数组的TypeScript接口

深嵌套数组的TypeScript接口,typescript,Typescript,我对Typescript完全陌生,在其他领域也取得了一些进展,但我正在努力为具有“taskName”和“totaltaskhurs”的深度嵌套对象创建接口。数据如下所示: [ { "20229622": [ { "taskName": "Project Management", "totalTaskHours": "1589.4" }, { "taskName": "M

我对Typescript完全陌生,在其他领域也取得了一些进展,但我正在努力为具有“taskName”和“totaltaskhurs”的深度嵌套对象创建接口。数据如下所示:

[
    {
      "20229622": [
        {
          "taskName": "Project Management",
          "totalTaskHours": "1589.4"
        },
        {
          "taskName": "Marketing",
          "totalTaskHours": "1306.8"
        },
        {
          "taskName": "Design",
          "totalTaskHours": "212.4"
        },
        {
          "taskName": "Programming",
          "totalTaskHours": "415.8"
        }
      ]
    },
    {
      "20229623": [
        {
          "taskName": "Project Management",
          "totalTaskHours": "980.1"
        },
        {
          "taskName": "Marketing",
          "totalTaskHours": "717.3"
        },
        {
          "taskName": "Design",
          "totalTaskHours": "468.9"
        }
      ]
    },
    {
      "20229624": [
        {
          "taskName": "Programming",
          "totalTaskHours": "5930.1"
        },
        {
          "taskName": "Project Management",
          "totalTaskHours": "997.2"
        },
        {
          "taskName": "Marketing",
          "totalTaskHours": "2108.69"
        },
        {
          "taskName": "Design",
          "totalTaskHours": "529.2"
        }
      ]
    }
  ]
我试图深入到嵌套数组中的对象,但每次都会出错

我尝试了以下方法(显然是错误的):

我也尝试了以下方法,但数据太浅:

interface TaskItem {
  taskName: string;
  totalTaskHours: string;
}
interface TaskBreakdownSummedByCategory {
  [key:string]: TaskItem;
}

有人能帮我解决这个问题吗?我仍在学习,但基本教程并不真正涉及深嵌套对象。谢谢

你真的很接近。由于外部数组是一个数组,因此您只需定义其元素的类型(
TaskItemHolder
如下):

那么整个数组的类型是
TaskItemHolder[]

这就是说,上面将允许在
TaskItemHolder
上使用多个属性,而不仅仅是一个属性。正如我在评论中提到的,如果你能改变结构,我会的。让一个对象具有一个名称不同的属性不是一个好主意(即使不使用静态类型,但特别是在使用静态类型时)


如果要循环遍历该数据,由于存在问题的结构,您可能会使用
Object.keys(…)[0]
来获取一个属性的键(或
Object.entries(…)[0]
来获取键和值,或仅使用
Object.values(…)[0]
来获取值):

或者,如果持有者中可能存在其他属性,则只需使用该键/条目/值数组:

for (const holder of data) {
  for (const [key, value] of Object.entries(holder)) {
    console.log("Holder with key " + key + ":");
    for (const entry of value) {
      console.log(entry.taskName);
    }
  }
}

这是一个非常不幸的数据结构(那些属性名称不同的对象)。你有选择改变它吗?不幸的是,我没有选择改变。这是API调用的JSON对象响应。感谢您的快速回复。我也尝试过这种方法,但是第2项和第3项的键是“undefined”,而不是{taskName:string;totaltaskhurs:string;}。@technicacreativejp-我不明白你的意思,你说的“第2项和第3项”是什么意思?数据中每个持有者正好有一个项目数组,该数组中的条目没有定义。{code>未定义。{code>当我添加[]:Type'({“20229622”:{taskName:string;totaltaskhurs:string;}[];“20229623”?:未定义;“20229624”?:未定义;}{“20229623”:{taskName:string;totaltaskhurs:string;}[];“20229622”?:未定义;“20229624”?:未定义;}{…}][]不可分配给类型“TaskBreakdownsumedByCategory[]”。属性“20229623”与索引签名不兼容。类型“undefined”不可分配给类型“TaskItem[]”。@technicacreativejp-您不需要
TaskBreakdownsumedByCategory
(即,对于您显示的数据结构),只需要答案中显示的内容。如果您还需要
taskbreakdownsumedbycategory
,请说明您需要它做什么以及如何使用它。
interface TaskItem {
  taskName: string;
  totalTaskHours: string;
}

interface TaskItemHolder {
  [key: string]: TaskItem[];
}
for (const holder of data) {
  const key = Object.keys(holder)[0];
  console.log("Holder with key " + key + ":");
  for (const entry of holder[key]) {
    console.log(entry.taskName);
  }
}
for (const holder of data) {
  for (const [key, value] of Object.entries(holder)) {
    console.log("Holder with key " + key + ":");
    for (const entry of value) {
      console.log(entry.taskName);
    }
  }
}