面试题答案
一键面试class Queue<T extends { length: number }> {
private items: T[] = [];
enqueue(item: T) {
this.items.push(item);
}
dequeue(): T | undefined {
return this.items.shift();
}
}
设置约束的原因:设置泛型类型T
必须具有length
属性,是为了确保队列中的元素都有一个可访问的length
属性,这在某些需要根据元素长度进行特定操作的场景下非常有用。例如,当队列元素是字符串数组、数组等具有length
属性的数据结构时,可以基于这个属性做进一步处理,同时也增强了代码的类型安全性,避免向队列中添加不满足特定结构要求的元素。
实现方式:在定义泛型类Queue
时,通过T extends { length: number }
语法对泛型类型T
进行约束,表明T
必须是具有length
属性的类型。在类的实现中,无论是入队方法enqueue
还是出队方法dequeue
,都按照这个约束来处理T
类型的元素,保证只有符合约束的元素才能进入队列并从队列中取出。