Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Typescript interface for a nested array of objects

I'm new to Typescript and I have to build an interface for the following props type:

const myProps = [
  {
    name: 'name1',
    on: true,
    children: [
      { name: 'test1', href: '#' },
      { name: 'test2', href: '#' },
      { name: 'test3', href: '#' }
    ]
  },
  {
    name: 'name2',
    on: false,
    children: [
      { name: 'test1', href: '#' },
      { name: 'test2', href: '#' },
      { name: 'test3', href: '#' },
      { name: 'test4', href: '#' },
      { name: 'test5', href: '#' }
    ]
  },
  {
    name: 'name3',
    on: false,
    children: [{ name: 'test1', href: '#' }]
  }
];

I want to create an interface for it to be used in a React + Typescript app.

This is the interface so far:

export interface IChildren {
  name: string,
  href: string
}

export interface IMyProps {
  name: string,
  on: boolean,
  children: IChildren,
}

It is not working, it should have some arrays I guess. Any suggestions?

like image 984
Leo Messi Avatar asked Dec 08 '25 18:12

Leo Messi


2 Answers

If you are using two interfaces you can use the following two methods.

  export interface ChildrenProp {
        name: string,
        href: string
    }

  export interface MyProps {
        name: string;
        on: boolean;
        children: ChildrenProp[]
    }

or

    export interface MyProps {
        name: string;
        on: boolean;
        children: Array<ChildrenProp>
    }

If you are not using two interfaces you can use the following method

export interface MyProps {
    name: string;
    on: boolean;
    children: {
       name: string,
       href: string
    }[]
}
like image 141
Ishan Fernando Avatar answered Dec 11 '25 11:12

Ishan Fernando


You can try like this,

 export interface CommonProps {
    name: string;
    href: string;
}

export interface MyProps {
    name: string;
    on: boolean;
    children: Array<CommonProps>;
}

Also Note data interfaces should not start with naming conventions "I" Interfaces those have method declarations should have "I" like IMethodService

like image 43
Sohan Avatar answered Dec 11 '25 09:12

Sohan



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!