使用Typescript扩展Leaflet标记

6

我正在进行一个涉及TypeScript和Leaflet的项目。

扩展leaflet标记的文档(JS)方式如下:

L.Marker.Foo = L.Marker.extend({...});

然而,TypeScript 抱怨:
Property 'Foo' does not exist on type 'typeof Marker'.

如何更改以消除编译错误?

1个回答

6

扩展Marker如下:

 export class TSMarker extends L.Marker {
        options: L.MarkerOptions

        constructor(latLng: LatLngExpression, options?: L.MarkerOptions) {
            super(latLng, options)
        }

        greet(): this {
            this.bindPopup("Hello! TSX here!")
            return this
        }

    }

源代码


这不符合Leaflet插件的约定:“如果您继承了现有类之一,请将其作为子属性(L.TileLayer.Banana)。”(https://leafletjs.com/examples/extending/extending-1-classes.html)。如果可能的话,我想遵循这个约定。 - solidau
@solidau 我非常了解这个 Leaflet 约定,它可以追溯到作用域污染成为问题的时候,但是它与 TypeScript 不兼容。在你的情况下,你需要手动扩展 Leaflet 命名空间,以消除 TypeScript 编译器的警告。 - ghybs
@ghybs 是的,最后我就按照这个答案做了。 - solidau
建议的方法似乎有些问题... Leaflet 不使用标准的 ES6/TypeScript 类,而是使用自定义的内部类系统。为什么要使用类来进行类型定义?我也不知道... 但是在这里执行建议的方法并没有利用到 Leaflet 使用的任何类系统。 - Etienne Martel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接