MST

星途 面试题库

面试题:TypeScript泛型类的复用场景

设计一个TypeScript泛型类 `Stack`,用于模拟栈的数据结构。要求实现 `push`(入栈)、`pop`(出栈)和 `peek`(查看栈顶元素)方法。同时,考虑如何利用泛型使得这个栈类可以处理不同类型的数据,并且在类型检查时能准确无误。此外,说明在实际项目中,这种泛型栈类相较于普通栈类(非泛型)有哪些优势和适用场景。
13.4万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
class Stack<T> {
    private items: T[] = [];

    push(item: T) {
        this.items.push(item);
    }

    pop(): T | undefined {
        return this.items.pop();
    }

    peek(): T | undefined {
        return this.items[this.items.length - 1];
    }
}

泛型栈类相较于普通栈类的优势

  1. 代码复用性:泛型栈类可以处理不同类型的数据,而不需要为每种数据类型都编写一个单独的栈类。例如,既可以创建一个存储数字的栈 new Stack<number>(),也可以创建一个存储字符串的栈 new Stack<string>(),大大减少了重复代码。
  2. 类型安全:在编译时,TypeScript 会根据泛型类型参数进行类型检查。如果尝试将不匹配类型的数据入栈,编译器会报错,避免了运行时类型错误。例如,let stack = new Stack<number>(); stack.push('string'); 会在编译时报错。

适用场景

  1. 通用数据结构库:在开发通用的数据结构库时,泛型栈类非常有用。因为库需要支持多种数据类型,泛型能提供统一的实现,满足不同用户对于不同数据类型栈的需求。
  2. 算法实现:在实现一些算法时,可能需要使用栈结构处理不同类型的数据。使用泛型栈类可以让算法代码更通用,例如深度优先搜索(DFS)算法中使用栈来存储节点,节点类型可能多样,泛型栈就能很好地适应这种情况。