简体   繁体   English

Typescript - 如何为json对象创建嵌套接口

[英]Typescript - How to create nested interface for json object

I am trying to create nested json object for which I have created Interface.I am getting error as Type of property serservicesAndHeads are incompatible and says Property is missing . 我正在尝试创建我已创建Interface的嵌套json对象。我收到错误,因为Type of property serservicesAndHeads are incompatible并且表示Property is missing My Interface is as follows: 我的界面如下:

  interface  Head {
    HeadNumber?: string;
    HeadDescription?: string;
  };

  interface  ServicesAndHead {
    majorService?: string;
    subMajorService?: string;
    servicesAndHeads:Head[];
  }

  export interface MyTableItem {
   demandNo?: string;
   demandName?: string;
   servicesAndHeads?:ServicesAndHead;
   //servicesAndHeads?:ServicesAndHead[];
  }

Where my json looks like this: 我的json看起来像这样:

  const dataItem: MyTableItem =
  {
    demandNo: 'Demand Number 2',
    demandName: 'Animal Husbandary, Livestock, Fisheries and Veterinary Services',
    servicesAndHeads: [
    {
      majorService: 'C-Economic Service',
      subMajorService: '(a) Agriculture and Allied Activities',
      majorHead: [
       { majorHeadNumber: '3098', majorHeadDescription: 'Animal Husbandry' },
       { majorHeadNumber: '3999', majorHeadDescription: 'Diary Development' },
       { majorHeadNumber: '4902', majorHeadDescription: 'Fisheries' }
      ]
    },
    {
      majorService: 'C- Capital Account of Economic Services',
      subMajorService: '(a) Capital Account of Agriculture and Allied Activities',
      majorHead: [
        { majorHeadNumber: '0012', majorHeadDescription: 'Capital Outlay on Animal ' },
        { majorHeadNumber: '3245', majorHeadDescription: 'Capital Outlay on Fisheries' }
      ]
     }
   ]
  }

I have tried this as well for nesting of serviceAndHead 我也尝试过这样做来嵌套serviceAndHead

  servicesAndHeads?: {
      [key: string]:ServicesAndHead,
      majorHeads?: {
        [key: string]:MajorHead
      };
  };

How would I rectify my code to accept the said json. 我如何纠正我的代码以接受所述json。

Define Interfaces as below: 定义接口如下:

interface  Head {
   majorHeadNumber?: string;
   majorHeadDescription?: string;
};

interface  ServicesAndHead {
   majorService?: string;
   subMajorService?: string;
   majorHead: Head[];
}

export interface MyTableItem {
   demandNo?: string;
   demandName?: string;
   servicesAndHeads?:ServicesAndHead[];
}

This will be compatible with your Json object. 这将与您的Json对象兼容。

const dataItem: MyTableItem = {

    demandNo: 'Demand Number 2',
    demandName: 'Animal Husbandary, Livestock, Fisheries and Veterinary Services',
    servicesAndHeads: [
    {
       majorService: 'C-Economic Service',
       subMajorService: '(a) Agriculture and Allied Activities',
       majorHead: [
       { 
          majorHeadNumber: '3098', 
          majorHeadDescription: 'Animal Husbandry' 
       },
       { 
          majorHeadNumber: '3999', 
          majorHeadDescription: 'Diary Development'
       },
       { 
          majorHeadNumber: '4902', 
          majorHeadDescription: 'Fisheries'
       }]
     },
     {
       majorService: 'C- Capital Account of Economic Services',
       subMajorService: '(a) Capital Account of Agriculture and Allied Activities',
       majorHead: [
       { 
          majorHeadNumber: '0012', 
          majorHeadDescription: 'Capital Outlay on Animal '
       },
       { 
          majorHeadNumber: '3245', 
          majorHeadDescription: 'Capital Outlay on Fisheries'
       }]
     }]
    }

The ServicesAndHead interface defines the servicesAndHeads property as mandatory but both dataItem.servicesAndHeads 's array elements lack this property. ServicesAndHead接口将servicesAndHeads属性定义为必需属性,但dataItem.servicesAndHeads的数组元素都缺少此属性。 They feature majorHead property instead. 它们具有majorHead属性。 Perhaps, you meant 或许,你的意思

interface  ServicesAndHead {
  majorService?: string;
  subMajorService?: string;
  majorHead: Head[];
}

If so, you also need to adjust the Head interface as follows: 如果是这样,您还需要调整Head界面,如下所示:

interface  Head {
  majorHeadNumber?: string;
  majorHeadDescription?: string;
};

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM