微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决类型“Marker<any>”上不存在属性“_popup”

所以,我正在使用 angular 和传单构建地图。我使用的其中一件事是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 类型的 Leaflet 上声明,因为您不会使用它们。

当然,这在 JS 中在技术上仍然有效,因此您可以使用该行上方的 //@ts-ignore 注释指令告诉 TS 编译器“我知道我在做什么”。

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

cluster.getAllChildMarkers()[0].getPopup()?.getContent()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。