我有一个BehaviourSubject
,例如:
public _position: BehaviorSubject<Position | undefined> = new BehaviorSubject(undefined);
public position$: Observable<Position | undefined> = this._position.asObservable();
public get position() {
return this._position.getValue();
}
我想这样使用:
this.position$.subscribe((position) => {
if (typeof position !== 'undefined') {
let latLng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
}
});
但是无论我如何尝试,我仍然会看到Typescript错误:
[ts]对象可能是'undefined'。
position.coords.latitude
和position.coords.longitude
。
我不明白。我已指定类型可以为Position
或undefined
。我给了它一个初始的undefined
值。我还使用typeof position !== 'undefined'
来保护变量。这是怎么回事?
答案 0 :(得分:1)
TypeScript有时会一无所获。.
你能尝试
this.position$.subscribe((position) => {
if (position && position.coords) {
let latLng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
}
});
答案 1 :(得分:1)
不确定为什么打字稿会显示该错误,但可以使代码更简洁:
如果您使用rxjs> 5,则可能必须重写过滤器并映射
public _position: BehaviorSubject<Position> = new BehaviorSubject(null);
public position$: Observable<Position> = this._position.asObservable();
public get position() {
return this._position.getValue();
}
this.position$
.filter(Boolean)
.map(position => position.coords)
.subscribe((coords) => {
let latLng = new google.maps.LatLng(coords.latitude, coords.longitude);
});