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

TypeScript初始化的reactive对象赋值后值为undefined求助

问题分析与解决方案

核心问题

  1. 冗余的await关键字:你在赋值语句中使用了await,但{ ...state.mapMarker.coords }是同步创建的普通对象,并非Promise,await会无意义地将其包装为已决议的Promise,虽不会直接导致undefined,但属于无效代码。
  2. 运行时结构与TypeScript类型不匹配:控制台显示mapMarker的经纬度不在coords属性下,说明实际运行时state.mapMarker的结构和你定义的State类型不一致——TypeScript的静态类型校验无法强制运行时结构完全符合,大概率是其他地方给mapMarker赋值时,未将经纬度放入coords子对象,而是直接挂在了mapMarker根属性上。

修复步骤

  1. 移除多余的await:
    将问题行修改为:
    state.otherPos.coords = { ...state.mapMarker.coords };
    
  2. 确认mapMarker的实际结构:
    在赋值前打印完整对象,定位经纬度的实际位置:
    console.log("mapMarker 完整结构:", state.mapMarker);
    
    • 如果打印结果显示latitude和longitude直接在mapMarker根节点(而非coords下),则调整赋值逻辑为:
      state.otherPos.coords = {
        latitude: state.mapMarker.latitude,
        longitude: state.mapMarker.longitude
      };
      
  3. 修正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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:05:13