Fix Leaflet.Draw.DrawEvents.Created.layer type (#23137)

The DrawEvents.Created layer variable is not of type Layer. As noted by
the in-code documentation, the Leaflet.Draw.DrawEvents.Created.layer
variable is one of Leaflet's vector shapes or a markers.

https://github.com/Leaflet/Leaflet.draw/blob/c6af99b761c5d9900bf5a3e2e1d8827bbde29542/src/Leaflet.Draw.Event.js#L31

The L.Draw.Event.CREATED event is only fired by Draw.Feature in the
_fireCreatedEvent method.

Draw.Feature bequeaths _fireCreatedEvent to it's subclasses Draw.Marker,
Draw.Polyline, and Draw.SimpleShape, which in turn bequeath the method
to  Draw.Circle, Draw.Rectangle (both from Draw.SimpleShape),
Draw.CircleMarker (from Draw.Marker), and Draw.Polygon (from
Draw.Polyline).

Draw.Circle, Draw.CircleMarker, Draw.Marker, Draw.Rectangle and
Draw.Polyline override the _fireCreatedEvent to pass instances of their
respective vector classes to _fireCreatedEvent, meaning that the layer
variable is not of type Layer, but instead one of the vector or marker
classes. For example, Draw.Circle passes L.Circle to
L.Draw.Feature.prototype._fireCreatedEvent as the argument to the
`layer` parameter.

Note that Draw.Polygon inherits Draw.Polyline's behavior without
changes, but changes the vector class via the Poly class variable.
This commit is contained in:
Andrew Pinkham
2018-01-24 09:01:32 -08:00
committed by Andy
parent 76a6216365
commit 021cf2a985
2 changed files with 2 additions and 1 deletions
+1 -1
View File
@@ -387,7 +387,7 @@ declare module 'leaflet' {
/**
* Layer that was just created.
*/
layer: Layer;
layer: Circle | CircleMarker | Marker | Polygon | Polyline | Rectangle;
/**
* The type of layer this is. One of: polyline, polygon, rectangle, circle, marker.
+1
View File
@@ -41,6 +41,7 @@ map.addControl(drawControl);
map.on(L.Draw.Event.CREATED, (e: L.DrawEvents.Created) => {
const type = e.layerType;
const layer = e.layer;
const geojson = e.layer.toGeoJSON();
drawnItems.addLayer(layer);
});