typescript - Utvide eksisterende @types-type-definisjon for å inkludere manglende egenskaper
Jeg bruker de nyeste leaflet @types i prosjektet mitt (v1.2.5), men disse er ikke i samsvar med den nyeste versjonen av leaflet (1.3.x)
Spesielt inkluderer ikke deres LayerGroup-grensesnitt en setZIndex-egenskap, og derfor ønsker jeg å utvide grensesnittet ytterligere for å inkludere dette slik at jeg kan kalle funksjonen i TS-koden min.
Deres typedefinisjon for en LayerGroup ser for øyeblikket slik ut:
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;
}
}
Ville det være mulig for meg å legge til en annen typedefinisjon i prosjektet mitt for å gi den manglende egenskapen?
Jeg vet at jeg kan opprette en pull request for å legge dette til på @types-repoet, men i mellomtiden, for å kunne fortsette utviklingen, håpet jeg at jeg kunne bruke noe midlertidig
Svar #1
Du kan erklære en utvidelse for 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);
Merk Jeg installerte type-definisjonene for Leaflet (npm install @types/leaflet) og de inneholder faktisk denne metoden, og definisjonen du postet ser ikke ut til å være den som er i definisjonen nå. Sørg for at du har den nyeste definisjonen
