You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 10:39:00