MST

星途 面试题库

面试题:TypeScript 中泛型在复杂数据结构中的应用

假设有一个多层嵌套的树形数据结构,节点可能包含不同类型的数据。请使用 TypeScript 泛型来定义该数据结构,并实现一个递归函数,能够遍历该树形结构并对每个节点的数据进行特定操作(例如打印节点数据),展示如何利用泛型增强代码的灵活性和类型安全性。
13.2万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
// 定义树形数据结构的类型
interface TreeNode<T> {
    data: T;
    children: TreeNode<T>[];
}

// 递归遍历树形结构并操作节点数据的函数
function traverseTree<T>(node: TreeNode<T>, action: (data: T) => void) {
    // 对当前节点数据执行操作
    action(node.data);
    // 递归遍历子节点
    node.children.forEach(child => traverseTree(child, action));
}

// 示例用法
const tree: TreeNode<number> = {
    data: 1,
    children: [
        {
            data: 2,
            children: [
                { data: 4, children: [] },
                { data: 5, children: [] }
            ]
        },
        {
            data: 3,
            children: [
                { data: 6, children: [] },
                { data: 7, children: [] }
            ]
        }
    ]
};

// 定义打印节点数据的操作
const printData = (data: number) => console.log(data);

// 遍历树并打印节点数据
traverseTree(tree, printData);
  1. 定义树形结构类型:通过interface TreeNode<T>,使用泛型T来表示节点中数据的类型,使得这个树形结构可以容纳不同类型的数据。
  2. 实现递归遍历函数traverseTree函数接受一个树节点和一个操作函数action,该操作函数接受节点数据类型T作为参数。在函数内部,首先对当前节点数据执行action,然后递归地对每个子节点调用traverseTree
  3. 示例用法:创建一个包含数字数据的树形结构,并定义一个打印数据的操作函数printData,最后调用traverseTree函数遍历树并执行打印操作。这样,通过泛型增强了代码的灵活性和类型安全性,使得相同的遍历逻辑可以适用于不同数据类型的树形结构。