MST
星途 面试题库

面试题:TypeScript递归类型构建树形结构并实现深度克隆

利用TypeScript递归类型构建一个通用的树形结构,树节点具有任意属性(属性名和属性值类型自定义)以及children数组。编写一个深度克隆函数,使用TypeScript类型系统确保克隆后的树形结构与原结构类型完全一致,并且新结构与原结构相互独立,修改其中一个不会影响另一个。请详细说明类型定义和克隆函数的实现思路及代码。
21.2万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

类型定义思路

  1. 首先定义树节点类型,由于节点具有任意属性,使用Record<string, any>来表示属性。
  2. children数组存放子节点,类型为当前树节点类型的数组,形成递归类型。

克隆函数实现思路

  1. 递归遍历树的每个节点。
  2. 为每个节点创建一个新的对象,复制其属性。
  3. 递归克隆子节点数组,并将克隆后的子节点数组赋值给新节点的children属性。

代码实现

// 树节点类型定义
type TreeNode<T = any> = {
    [key: string]: T;
    children?: TreeNode<T>[];
};

// 深度克隆函数
function deepCloneTree<T>(tree: TreeNode<T>): TreeNode<T> {
    const newNode: TreeNode<T> = {...tree };
    if (tree.children) {
        newNode.children = tree.children.map(child => deepCloneTree(child));
    }
    return newNode;
}