我正在尝试在我的Typescript类中实现队列结构。我有一个队列课程。
class Queue implements IQueue {
private storage: number[] = [];
constructor(private capacity: number = 3) {}
enqueue(rssi: number){
if(this.size() == this.capacity) throw new Error("Has reached max capacity");
this.storage.push(rssi);
}
dequeue(): number | undefined{
return this.storage.shift();
}
size(): number{
return this.storage.length;
}
signalMean(): number{
var mean: number = 0;
this.storage.forEach(rssi => mean = mean + rssi);
return mean;
}
}
所以我尝试初始化队列:
var init = new Queue(3);
并在此处使用它
if(signals.get(sender.id) == undefined) signals.set(sender.id, init);
当我尝试添加以下代码时:
if(signals.get(sender.id)?.size() < signals.get(sender.id).capacity) {
signals.get(sender.id).enqueue(sender.signal);
} else {
signals.get(sender.id).dequeue();
signals.get(sender.id).enqueue(sender.signal);
}
我得到的对象可能是'undefined'。错误,尽管我用if(signals.get(sender.id) == undefined) signals.set(sender.id, init);
行检查并初始化了它。
但是当我使用日志控制它时,它可以工作...如何解决此问题?
答案 0 :(得分:0)
if(signals.get(sender.id)?. size()
问题是,使用safe-access-operator(?
)告诉编译器,signals.get(sender.id)?.size()
可能是未定义的。结果,您可以将此不确定的值与<
运算符进行比较。最简单的解决方法是删除安全访问操作员并分别处理不存在的情况。