属性'_popup'在类型 'Marker<any>' 上不存在



所以,我正在使用角和传单建立一个地图。我使用的一个工具是leaflet。markercluster。当我点击集群我想要一个集群的随机标记的弹出内容写在某个地方。为了访问一些随机集群的弹出内容,我这样做了:

cluster.getAllChildMarkers()[0]._popup._content

并得到一个错误:属性'_popup'不存在类型'Marker'.

但问题是,如果我第一次做ng serve它编译失败,但如果我改变任何东西并保存所有它成功编译的错误,我可以看到弹出的内容。

另外,如果我做console.log(cluster.getAllChildMarkers()[0]),我检查网页上的元素,我得到一个具有latlng和所有其他属性的标记的常规控制台日志,包括_popup.

有谁知道为什么typescript/vscode记录错误,但html控制台看到它正常吗?

因为TypeScript比JavaScript更严格,它会警告你潜在的问题,而这些问题在JS中编译后可能会正常工作。

在这个特殊的例子中,这仅仅是由于伪私有属性("_popup"遵循通常的JS库约定,使用下划线_前缀来表示未在传单的TS类型上声明的伪私有成员,因为您不希望使用它们。

但当然这在JS中技术上仍然是有效的,所以你可以告诉TS编译器"我知道我在做什么";通过使用//@ts-ignore注释指令,

或者更长,但更好,因为你可以保持在TS的监视下:使用实际的传单API来实现你正在做的事情:

  • getPopup()方法
  • getContent()方法
cluster.getAllChildMarkers()[0].getPopup()?.getContent()

最新更新