In JavaScript (mit Prospekt), habe ich einige benutzerdefinierten functionnalities L.Class.include()
in der Dokumentation, wie geschrieben mit implementieren könnte: mit LEquivalent von L.Class.include() mit Typoskript
Einschließlich mehr Funktionalität in einer vorhandenen Klasse .Class.include() Hinzufügen neuer Methoden und Optionen Ändern einiger Methoden Verwenden von addInitHook, um zusätzlichen Konstruktorcode auszuführen.
Dies funktioniert:
L.Rectangle.include({
contains: function (markers: L.Marker[]) {
const markersContained: boolean[] = [];
markers.forEach(marker => {
console.log(marker);
markersContained.push(this.getBounds().contains(marker.getLatLng()));
})
return markersContained;
}
});
Nun Ich versuche, das gleiche in einer Angular4 Anwendung mit Typoskript zu implementieren, aber die include()
Funktion scheint nicht in den @types/leaflet
Die Sache ist, dass mein Code in einer .ts
Datei ist, die für Leaflet.Draw
Plugin zugeschnitten ist, so musste ich die Datei auf diese Weise initialisieren:
declare const L: any;
import 'leaflet-draw/dist/leaflet.draw-src';
statt den regulären
import * as L from 'leaflet';
aufgrund der Tatsache, dass die Leaflet.Draw
Plugin keine @types
hat, daher kann ich nicht die regulären Faltblatt Typen importieren (Sonst new L.Control.Draw()
würde einen Übersetzungsfehler machen).
Dies bricht bei der Kompilierung:
map.on(L.Draw.Event.CREATED, (geometry: L.LayerEvent) => {
const layer = geometry.layer;
drawnItems.addLayer(layer);
// Set an array containing all the markers
const markers = LeafletService.prototype.jsonToArray(layerGroup.getLayers());
// ===> Property 'contains' does not exist on type 'Layer'.
const result = geometry.layer.contains(markers);
console.log('result => ', result);
});
und natürlich, das funktioniert, wenn ich meinen Geometrietyp als any
gesetzt, aber ich mag den L.LayerEvent
Typen verwenden, wenn möglich, und will wissen, Wie könnte ich die TypeScript-Syntax verwenden, um die Methode Leaflet include()
korrekt zu verwenden?