typescript - Utöka befintlig @types typdefinition för att inkludera saknade egenskaper
Jag använder de senaste leaflet @types i mitt projekt (v1.2.5), men dessa är inte i linje med den senaste versionen av leaflet (1.3.x)
Speciellt inkluderar deras LayerGroup-gränssnitt inte en setZIndex-egenskap, så jag skulle vilja utöka gränssnittet ytterligare för att inkludera detta så att jag kan anropa funktionen i min TS-kod.
Deras typdefinition för ett LayerGroup ser för närvarande ut så här:
declare namespace L {
/**
* Create a layer group, optionally given an initial set of layers.
*/
function layerGroup<T extends ILayer>(layers?: T[]): LayerGroup<T>;
export interface LayerGroupStatic extends ClassStatic {
/**
* Create a layer group, optionally given an initial set of layers.
*/
new<T extends ILayer>(layers?: T[]): LayerGroup<T>;
}
export var LayerGroup: LayerGroupStatic;
export interface LayerGroup<T extends ILayer> extends ILayer {
/**
* Adds the group of layers to the map.
*/
addTo(map: Map): LayerGroup<T>;
/**
* Adds a given layer to the group.
*/
addLayer(layer: T): LayerGroup<T>;
/**
* Removes a given layer from the group.
*/
removeLayer(layer: T): LayerGroup<T>;
/**
* Removes a given layer of the given id from the group.
*/
removeLayer(id: string): LayerGroup<T>;
/**
* Returns true if the given layer is currently added to the group.
*/
hasLayer(layer: T): boolean;
/**
* Returns the layer with the given id.
*/
getLayer(id: string): T;
/**
* Returns an array of all the layers added to the group.
*/
getLayers(): T[];
/**
* Removes all the layers from the group.
*/
clearLayers(): LayerGroup<T>;
/**
* Iterates over the layers of the group, optionally specifying context of
* the iterator function.
*/
eachLayer(fn: (layer: T) => void, context?: any): LayerGroup<T>;
/**
* Returns a GeoJSON representation of the layer group (GeoJSON FeatureCollection).
* Note: Descendent classes MultiPolygon & MultiPolyLine return `Feature`s, not `FeatureCollection`s
*/
toGeoJSON(): GeoJSON.FeatureCollection<GeoJSON.GeometryObject>|GeoJSON.Feature<GeoJSON.MultiLineString|GeoJSON.MultiPolygon>;
////////////
////////////
/**
* Should contain code that creates DOM elements for the overlay, adds them
* to map panes where they should belong and puts listeners on relevant map events.
* Called on map.addLayer(layer).
*/
onAdd(map: Map): void;
/**
* Should contain all clean up code that removes the overlay's elements from
* the DOM and removes listeners previously added in onAdd. Called on map.removeLayer(layer).
*/
onRemove(map: Map): void;
}
}
Skulle det vara möjligt för mig att lägga till en annan typdefinition i mitt projekt för att tillhandahålla den saknade egenskapen?
Jag vet att jag kan skapa en pull-begäran för att lägga till detta på @types-repot, men under tiden, för att inte bli blockerad från utveckling, hoppades jag att jag kunde använda något tillfälligt
Svar #1
Du kan deklarera en förstärkning för modulen:
// leaflet.aug.d.ts
import 'leaflet';
declare module 'leaflet' {
export interface LayerGroup<P = any> {
otherProps: number;
setZIndex (id: number) : Layer[];
}
}
// Other file
/// <reference path="./leaflet.aug.d.ts" />
import 'leaflet';
var d: L.LayerGroup;
d.otherProps = 10;
d.setZIndex(10);
Observera Jag installerade Leaflet-typerna (npm install @types/leaflet) och de innehåller faktiskt denna metod och definitionen som du postade ser inte ut som den som för närvarande finns i definitionen. Se till att du har den senaste definitionen.
