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.

Relaterade artiklar