MST

星途 面试题库

面试题:TypeScript中受限多态在泛型类中的应用

创建一个泛型类 `Queue`,用于实现队列数据结构。要求队列中的元素类型必须是 `string` 或者 `number` 的子类型。实现入队 `enqueue` 和出队 `dequeue` 方法,并解释在这个泛型类中如何通过受限多态保证类型安全,以及如何处理可能出现的类型不匹配问题。
39.0万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试
class Queue<T extends string | number> {
    private items: T[] = [];

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

    dequeue(): T | undefined {
        return this.items.shift();
    }
}
  1. 受限多态保证类型安全:通过定义泛型 T 并限制其为 string 或者 number 的子类型(T extends string | number),确保了队列只能接受符合这个类型约束的元素。在 enqueue 方法中,参数 item 的类型被严格限定为 T,这就保证了只有符合约束的类型才能入队。同样,dequeue 方法返回的类型也是 T 或者 undefined(当队列为空时),使用者可以明确知道返回值的类型范围,从而避免在后续代码中出现类型不匹配的错误。
  2. 处理类型不匹配问题:在编译阶段,TypeScript 编译器会根据类型约束进行检查。如果代码中尝试将不符合 stringnumber 子类型的元素入队,编译器会抛出错误,提示类型不匹配。这样在开发过程中就能及时发现并纠正潜在的类型错误,而不是在运行时才暴露问题。同时,在运行时,如果队列实现的语言支持运行时类型检查(如某些动态类型语言扩展实现的队列),可以在 enqueue 方法中添加额外的类型检查逻辑,当发现类型不匹配时可以抛出异常,让调用者处理这个错误情况。