首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重嵌套对象的TypeScript类型

重嵌套对象的TypeScript类型
EN

Stack Overflow用户
提问于 2021-01-31 00:45:15
回答 1查看 350关注 0票数 4

我得到了一棵树,我正试图以递归方式呈现

树变量只是一个例子,它可能会变得更大,这取决于应用程序获得的数据。

我如何才能让TypeScript对这棵树上的类型感到满意,即使我不知道嵌套将如何得到?

代码语言:javascript
复制
const tree = {
  people: ['Managing Director'],
  children: {
    people: ['Operations Director', 'Head of Client Services'],
    children: {
      people: ['Senior Developer']
    }
  }
}

interface IList {
  people: string[],
  children: string[]
}

interface IData {
  data: IList[]
}

const List: FC<IData> = ({ data }) => (
  <ul>
    {data.people.map((person) => ( <li>{person}</li> ))}
    {!data.children ? null : <List data={data.children} />}
  </ul>
)

function App() {
  return (
    <>
      <List data={tree} />
    </>
  )
}

当我在codesandbox上做这件事时,它是有效的,但有警告,如果我在我的配置上做,我会得到

代码语言:javascript
复制
`Property 'people' does not exist on type 'IList[]'`

EXAMPLE

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-31 00:48:31

您需要将children属性设置为可选和递归类型:

代码语言:javascript
复制
type Tree = {
    people: Array<string>;
    children?: Tree;
}

const tree: Tree = {
  people: ['Managing Director'],
  children: {
    people: ['Operations Director', 'Head of Client Services'],
    children: {
      people: ['Senior Developer']
    }
  }
}

然后,List可以接受Tree类型的属性并递归呈现它。

代码语言:javascript
复制
const List = ({ data }: { data: Tree }) => (
    <ul>
        {data.people.map((person) => (<li>{person}</li>))}
        {!data.children ? null : <List data={data.children} />}
    </ul>
)
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65970528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档