如何扩展递归打字稿接口?

Posted

技术标签:

【中文标题】如何扩展递归打字稿接口?【英文标题】:How to extend a recursive typescript interface? 【发布时间】:2022-01-20 06:25:26 【问题描述】:

我有一个递归接口,如下所示:

interface TreeNode 
  id: string
  children: TreeNode[]

我想像这样扩展TreeNode

interface TreeNodeWithMorePros extends TreeNode
  moreProps: any[]

但这还不够,因为root 可以拥有moreProps,但孩子们不能。

const tree: TreeNodeWithMorePros = 
  id: 'root', 
  moreProps: [], 
  children: [
    
      id: 'child', 
      children: [],
      // here I cannot use moreProps
    
  ]

如何正确扩展TreeNode 接口?

【问题讨论】:

【参考方案1】:

其实我刚刚找到了解决办法

有一个多态类型this可以使用:

interface TreeNode 
  id: string
  children: this[]


interface TreeNodeWithMorePros extends TreeNode
  moreProps: any[]


const tree: TreeNodeWithMorePros = 
  id: 'something',
  moreProps: [],
  children: [
    
      id: 'child',
      children: [],
      moreProps: []
    
  ]

现在可以正常使用了

【讨论】:

以上是关于如何扩展递归打字稿接口?的主要内容,如果未能解决你的问题,请参考以下文章

递归打字稿类型和反应形式

有没有更好的方法在打字稿中编写这种递归方法

如何扩展“Window”打字稿界面

打字稿与实现接口一起扩展类

打字稿:使用特定的扩展接口来满足通用的“扩展”类型参数?

打字稿扩展了两个像类型一样的接口?