属性 '_popup' 在类型 'Marker<any>' 上不存在
Property '_popup' does not exist on type 'Marker<any>'
所以,我正在使用 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 库约定,使用下划线 _ 前缀来表示伪私有成员)没有在 Leaflet 的 TS 类型上声明,因为您不应该使用它们。
但是当然这在 JS 中在技术上仍然有效,因此您可以使用该行上方的 //@ts-ignore
注释指令告诉 TS 编译器“我知道我在做什么”。
或更长但更好,因为您可以保持在 TS 监视下:使用实际的 Leaflet API 来实现您正在做的事情:
cluster.getAllChildMarkers()[0].getPopup()?.getContent()
所以,我正在使用 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 库约定,使用下划线 _ 前缀来表示伪私有成员)没有在 Leaflet 的 TS 类型上声明,因为您不应该使用它们。
但是当然这在 JS 中在技术上仍然有效,因此您可以使用该行上方的 //@ts-ignore
注释指令告诉 TS 编译器“我知道我在做什么”。
或更长但更好,因为您可以保持在 TS 监视下:使用实际的 Leaflet API 来实现您正在做的事情:
cluster.getAllChildMarkers()[0].getPopup()?.getContent()