React Native使用geolib取findNearest返回的latitude报类型错误如何解决
问题原因
geolib的GeolibInputCoordinates通用类型兼容两种坐标格式:
- 键值对对象格式:
{ latitude: number, longitude: number } - 数组格式:
[latitude: number, longitude: number]
TS默认推导findNearest返回值时不会限定具体格式,因此直接访问.latitude会触发类型不存在的报错,你打印能看到值是因为运行时返回的确实是你传入的对象格式,只是TS类型层面没有匹配上。
解决方案
- 方案1:类型断言(适合确认places数组所有元素都是带latitude/longitude属性的对象的场景)
调用方法时直接指定返回值类型:
const nearestPlace = geolib.findNearest( { latitude:6.4423456, longitude:75.9095818 }, places ) as { latitude: number, longitude: number }; // 后续可正常读取属性 const latitudeValue = nearestPlace.latitude;
- 方案2:添加格式判断(适合不确定坐标返回格式的场景,同时避免运行时错误)
let latitudeValue: number; if (Array.isArray(nearestPlace)) { // 数组格式第一个元素为纬度 latitudeValue = nearestPlace[0]; } else { latitudeValue = nearestPlace.latitude; }
- 方案3:提前定义places元素类型+指定泛型(最规范的TS写法)
首先给你的地点列表元素定义类型:
type PlaceItem = { latitude: number; longitude: number; // 可追加你的其他地点属性,比如名称、地址等 name?: string; }
声明places数组为PlaceItem[]类型,调用方法时指定泛型:
const nearestPlace = geolib.findNearest<PlaceItem>( { latitude:6.4423456, longitude:75.9095818 }, places ); // TS会自动推导nearestPlace为PlaceItem类型,可直接读取latitude属性 const latitudeValue = nearestPlace.latitude;
内容的提问来源于stack exchange,提问作者sama
相关产品推荐
相关产品推荐

