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