tkl*_*zig 1 javascript dictionary typescript strictnullchecks
给定以下简单的类:
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'
}
}
Run Code Online (Sandbox Code Playgroud)
此外,在tsconfig.json中,标记strictNullChecks和strict被启用。
尽管subscribers已检查当前事件的键,但打字稿编译器会抱怨上面显示的错误消息(this.subscribers.get(event)可能未定义)。
如果我不是完全错误,在这种情况下this.subscribers.get(event)绝对不能undefined。
我如何摆脱该信息?
键入Map显式状态可能get会导致undefined:
interface Map<K, V> {
...
get(key: K): V | undefined;
...
}
Run Code Online (Sandbox Code Playgroud)
这就是为什么在启用strictNullChecks时出错。
您可以使用非null断言运算符来通知编译器您确定它确实具有值:
this.subscribers.get(event)!.push(callback);
Run Code Online (Sandbox Code Playgroud)
另一种选择(我认为更好的选择)是通过以下方式重构代码:
public subscribe(event: string, callback: (data: any) => void) {
let callbacks = this.subscribers.get(event);
if (!callbacks) {
callbacks = []
this.subscribers.set(event, callbacks);
}
callbacks.push(callback);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1181 次 |
| 最近记录: |