3

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. 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:

  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

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

How would I rectify my code to accept the said json.

1
  • How are you typecasting your JSON into the interface object? I tried typecasting with <> but it didn't work for nested inteface. Commented Oct 29, 2021 at 9:45

2 Answers 2

6

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.

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'
       }]
     }]
    }
Sign up to request clarification or add additional context in comments.

Comments

0

The ServicesAndHead interface defines the servicesAndHeads property as mandatory but both dataItem.servicesAndHeads's array elements lack this property. They feature majorHead property instead. Perhaps, you meant

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

If so, you also need to adjust the Head interface as follows:

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.