2016-09-26 65 views
2

我正在研究Ionic2-Angular2-Typescript应用程序。我试图用科尔多瓦的地理位置插件,但是当我在http://ionicframework.com/docs/v2/native/geolocation/编辑器调用watchPosition方法一样显示我的一些错误:cordova-plugin-geolocation watchPosition()方法不起作用

错误TS2339:房产“代码”不会对类型“Geoposition存在| PositionError”。

错误TS2339:属性'coords'在类型'Geoposition | PositionError”。

这是我的代码:

import { Injectable } from '@angular/core'; 
import { Http } from '@angular/http'; 
import 'rxjs'; 
import { Observable } from 'rxjs/Observable'; 
import { Geolocation, PositionError, Geoposition } from 'ionic-native'; 

export class LocationProvider { 

    constructor(private http: Http) {} 

    var subscription = Geolocation.watchPosition() 
          .filter((p) => p.code === undefined) //Filter Out Errors 
          .subscribe(position => { 
    console.log(position.coords.longitude + ' ' + position.coords.latitude); 
}); 
} 

回答

3

最后,我解决我的问题如下:

this.subscription = Geolocation.watchPosition().subscribe(position => { 
    if ((position as Geoposition).coords != undefined) { 
     var geoposition = (position as Geoposition); 
     console.log('Latitude: ' + geoposition.coords.latitude + ' - Longitude: ' + geoposition.coords.longitude); 
    } else { 
     var positionError = (position as PositionError); 
     console.log('Error ' + positionError.code + ': ' + positionError.message); 
    } 
}); 
0

如何只设置回调函数内部的类型?无论如何,如果你对这些错误不感兴趣,可以使用较短的代码。

像这样(未测试):

this.subscription = Geolocation.watchPosition() 
    .filter((p: any) => p['code'] === undefined) // Filter Out Errors 
    .subscribe((position: GeoPosition) => { 
     console.log(position.coords.longitude + ' ' + position.coords.latitude); 
    }); 
+0

我不知道为什么,但是这是行不通的。我终于解决了我的问题,因为我在这里发布了答案。检查位置是Geoposition还是PositionError类型。 –