typescript - Mapbox-gl-typing tillater ikke tildeling av accessToken


Jeg bruker mapbox-gl-biblioteket med TypeScript, og jeg har installert dets fellesskapsbaserte type-definisjoner med @types/mapbox-gl. Når jeg prøver å importere og sette en accessToken for å bruke biblioteket, gir TypeScript-kompilatoren min denne feilen: TS2540: Cannot assign to 'accessToken' because it is a constant or a read-only property.

Så jeg åpnet .d.ts-filen, og variabelen det gjelder ser svært tildelbar ut (sett her: https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/mapbox-gl/index.d.ts):

declare namespace mapboxgl {
   let accessToken: string;
   ...

Dette er koden min:

import * as mapbox from 'mapbox-gl';
mapbox.accessToken = 'token';

Versjoner!

"@types/mapbox-gl": "^0.35.0",
"typescript": "^2.3.4",
"mapbox-gl": "^0.37.0",

TypeScript-triks sier at jeg kan kaste mapbox til hvilken som helst type og det vil fungere, men jeg er veldig nysgjerrig på hva som går galt med typingen her.

Svar #1

Her er en midlertidig løsning jeg har brukt:

Object.getOwnPropertyDescriptor(mapboxgl, "accessToken").set('YOUR_TOKEN');

Forklaring

Siden objektet ble omdefinert til å bruke en egendefinert setter som plasserer tokenet inne i en intern closure, kan vi kalle setter-funksjonen direkte som vist i eksemplet.

Dykker vi litt dypere, kan vi se at es6-moduler er konstanter i henhold til definisjonen: https://github.com/Microsoft/TypeScript/issues/6751#issuecomment-177114001

vi kan da gjøre noe sånt som: (mapboxgl as any).accessToken=... som vil fungere.

Svar #2

For de som finner dette nå ... Du trenger ikke engang å sette Mapbox accessToken på denne måten, det kan sendes inn som et alternativ (siden v1.2)

const map = new mapboxgl.Map({
  accessToken: '...',
  container: '...',
  style: '...',
});

Synd at det ikke er metoden som brukes i noen av eksemplene (ennå).

Dokumentasjon: https://docs.mapbox.com/mapbox-gl-js/api/#map

1.2 utgivelsesnotater: https://github.com/mapbox/mapbox-gl-js/releases/tag/v1.2.0

PR som legger det til: https://github.com/mapbox/mapbox-gl-js/pull/8364

Relaterte artikler