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

Relaterte artikler