下面是一个简单的类:
class Observer {
private subscribers: Map<string, Array<((data: any) => void)>> = new Map();
public subscribe(event: string, callback: (data: any) => void) {
if (!this.subscribers.has(event)) {
this.subscribers.set(event, []);
}
this.subscribers.get(event).push(callback); //tsc says: Object is possibly 'undefined'
}
}
此外,在tsconfig.json中,启用了标志strictNullChecks
和strict
。
尽管subscribers
被检查为当前事件的键,但typescript编译器仍会报告上面显示的错误消息(this.subscribers.get(event)
可能未定义)。
如果我没有完全错的话,在这种情况下,this.subscribers.get(event)
永远不可能是undefined
。
我怎样才能摆脱这条信息?
2条答案
按热度按时间nwsw7zdq1#
键入
Map
明确指出get
可以导致undefined
:这就是为什么你在启用strictNullChecks时出错的原因。
你可以使用非空Assert操作符来通知编译器你确定它实际上有值:
另一个选择(我认为是更好的一个)是用以下方式重构代码:
f2uvfpb92#
为什么不写一个新的接口/类,不允许未定义的值?
PS:事实上,当我发现这个SO帖子时,我正在搜索这样的接口/类;)