TypeScript初始化的reactive对象赋值后值为undefined求助
问题分析与解决方案
核心问题
- 冗余的
await关键字:你在赋值语句中使用了await,但{ ...state.mapMarker.coords }是同步创建的普通对象,并非Promise,await会无意义地将其包装为已决议的Promise,虽不会直接导致undefined,但属于无效代码。 - 运行时结构与TypeScript类型不匹配:控制台显示
mapMarker的经纬度不在coords属性下,说明实际运行时state.mapMarker的结构和你定义的State类型不一致——TypeScript的静态类型校验无法强制运行时结构完全符合,大概率是其他地方给mapMarker赋值时,未将经纬度放入coords子对象,而是直接挂在了mapMarker根属性上。
修复步骤
- 移除多余的
await:
将问题行修改为:state.otherPos.coords = { ...state.mapMarker.coords }; - 确认
mapMarker的实际结构:
在赋值前打印完整对象,定位经纬度的实际位置:console.log("mapMarker 完整结构:", state.mapMarker);- 如果打印结果显示
latitude和longitude直接在mapMarker根节点(而非coords下),则调整赋值逻辑为:state.otherPos.coords = { latitude: state.mapMarker.latitude, longitude: state.mapMarker.longitude };
- 如果打印结果显示
- 修正
mapMarker的赋值逻辑:
检查所有修改state.mapMarker的代码,确保经纬度始终被赋值到mapMarker.coords下,示例:// 正确赋值方式 state.mapMarker.coords = { latitude: 39.9, longitude: 116.3 }; // 错误赋值方式(会导致结构不匹配) // state.mapMarker.latitude = 39.9; // state.mapMarker.longitude = 116.3;
验证修改效果
修改后打印state.otherPos.coords确认值是否正确:
console.log("otherPos coords:", state.otherPos.coords);
内容的提问来源于stack exchange,提问作者Essentia
相关产品推荐
相关产品推荐

