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

在TypeScript中如何访问Google Maps事件监听器内数组的最新值

实现方案

核心问题是你当前的myArray是方法内的局部变量,作用域仅限制在声明它的方法内部,外部方法无法访问。你可以根据你的代码场景选择以下方案:

方案1:类场景(TypeScript最常用方案)

把myArray提升为类的成员属性,同时把监听器的回调改为箭头函数绑定this指向,避免作用域偏移:

class MapOperator {
  // 声明类属性,可根据需求调整访问修饰符(public/private/protected)
  private myArray: google.maps.LatLng[] = [];

  // 你原有注册监听器的方法
  registerMapListener(bermudaTriangle: google.maps.Polygon, poly: google.maps.Polygon) {
    // 回调改用箭头函数,绑定this指向类实例
    google.maps.event.addListener(bermudaTriangle.getPath(), 'set_at', (index, obj) => {
      console.log('Vertex moved on outer path.');
      console.log(obj.lat() ,'--',  obj.lng() );
      this.myArray = poly.getPath().getArray();
    });
  }

  // 你需要访问myArray的其他方法
  getLatestVertexArray() {
    // 直接取this.myArray即可拿到最新值
    return this.myArray;
  }
}

方案2:非类的模块场景

如果你的代码没有封装在类里,直接把myArray声明在两个方法的公共父作用域(比如模块顶层)即可:

// 模块顶层声明myArray,两个方法都可以访问
let myArray: google.maps.LatLng[] = [];

// 注册监听器的方法
function registerMapListener(bermudaTriangle: google.maps.Polygon, poly: google.maps.Polygon) {
  google.maps.event.addListener(bermudaTriangle.getPath(), 'set_at', (index, obj) => {
    console.log('Vertex moved on outer path.');
    console.log(obj.lat() ,'--',  obj.lng() );
    myArray = poly.getPath().getArray();
  });
}

// 另一个访问方法
function getLatestVertexArray() {
  return myArray;
}

注意事项

  • TypeScript中不建议使用var声明变量,尽量改用let/const避免变量提升带来的作用域问题
  • 访问myArray时可以加非空判断或者默认值,避免监听器还没触发时取到空数组的异常

内容的提问来源于stack exchange,提问作者Rahul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:06:06