Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

interface BaseTreeNode {
  id: number | string;
  name: string;
  childNode: BaseTreeNode[];
}

interface AntdTreeNode<T> {
  key: number | string;
  title: string;
  children: AntdTreeNode<T>[];
  data: T;
  scopedSlots?: unknown;
}

function baseTreeNodesToAntdTreeNodes<T extends BaseTreeNode>(baseTreeNodes: T[]): AntdTreeNode<T>[] {
  return baseTreeNodes.map(node => ({
    key: node.id,
    title: node.name,
    children: node.childNode ? baseTreeNodesToAntdTreeNodes<T>(node.childNode) : [],
    data: node,
  }));
}

以上代码类型报错如下,请问下为什么?
image.png

ps: 这里用泛型是因为BaseTreeNode是一个基类,还会有一堆派生类想共用此函数,比如:

interface FooTreeNode extends BaseTreeNode {
    foo: string;
}

const fooTreeNodes:FooTreeNode[] = ...;

const antdTreeNodes = baseTreeNodesToAntdTreeNodes<FooTreeNode>(fooTreeNodes);

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
362 views
Welcome To Ask or Share your Answers For Others

1 Answer

interface BaseTreeNode<T> {
  id: number | string
  name: string
  childNode: T[]
}

interface AntdTreeNode<T> {
  key: number | string
  title: string
  children: AntdTreeNode<T>[]
  data: T
  scopedSlots?: unknown
}

function baseTreeNodesToAntdTreeNodes<T extends BaseTreeNode<T>>(
  baseTreeNodes: T[],
): AntdTreeNode<T>[] {
  return baseTreeNodes.map(node => ({
    key: node.id,
    title: node.name,
    children: node.childNode
      ? baseTreeNodesToAntdTreeNodes<T>(node.childNode)
      : [],
    data: node,
  }))
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...