Mijn vraag
Ik probeer Maplibre-gl te gebruiken binnen Typescript om kaarten te genereren in een webapplicatie.
Ik heb daarvoor een script dat er zo uitziet (conform het voorbeeld dat in de documentatie van maplibre staat).
mymap.ts:
In mijn html bestand gebruik ik importmap om de maplibre bibliotheek te laden:
De vraag is wat er bij <iets> moet komen te staan. Kom ik zo op terug.
Relevante software en hardware die ik gebruik
Visual Studio 2022 (laatste editie)
Asp.Net 8
maplibre-gl 4.1.1 ingeladen via libman
Firefox (laatste editie)
Wat ik al gevonden of geprobeerd heb
Maplibre documentatie geeft geen direct voorbeeld van hoe de library te gebruiken met typescript. Gebaseerd op de code moet ik 'maplibregl' of 'Map' gaan inladen.
Het meest logische antwoord, wat ik ook ergens op stackoverflow tegenkwam is
Dit werkt echter niet. De foutmelding is import not found: default
De volgende syntax werkt ook niet:
De import geheel weghalen geeft de foutmelding dat maplibregl niet gevonden kon worden.
Wat wel werkt is
Als ik vervolgens in de browser-console M wil bekijken, krijg ik de melding dat M is undefined. Het rare is dat het statement new maplibregl.Map() gewoon werkt, terwijl ik 'maplibregl' of 'map niet heb geladen. Ik krijg bij deze import statement dan ook inderdaad de kaart te zien.
Ik snap dus absoluut niet waarom dit werkt. Nergens in documentatie over javascript modules, typescript en maplibre-gl staat hier iets over.
Ik probeer Maplibre-gl te gebruiken binnen Typescript om kaarten te genereren in een webapplicatie.
Ik heb daarvoor een script dat er zo uitziet (conform het voorbeeld dat in de documentatie van maplibre staat).
mymap.ts:
TypeScript:
1
2
3
4
5
6
7
8
| import <iets> from 'maplibre-gl'; new maplibregl.Map({ container: 'map', style: 'https://demotiles.maplibre.org/style.json', center: [-74.5, 40], zoom: 9 }); |
In mijn html bestand gebruik ik importmap om de maplibre bibliotheek te laden:
HTML:
1
2
3
4
5
6
7
8
| <script type="importmap" asp-append-version="true"> { "imports": { "maplibre-gl": "https://unpkg.com/maplibre-gl/dist/maplibre-gl.js" } } </script> <script src="~/js-test/mymap.min.js" type="module" asp-append-version="true"></script> |
De vraag is wat er bij <iets> moet komen te staan. Kom ik zo op terug.
Relevante software en hardware die ik gebruik
Visual Studio 2022 (laatste editie)
Asp.Net 8
maplibre-gl 4.1.1 ingeladen via libman
Firefox (laatste editie)
Wat ik al gevonden of geprobeerd heb
Maplibre documentatie geeft geen direct voorbeeld van hoe de library te gebruiken met typescript. Gebaseerd op de code moet ik 'maplibregl' of 'Map' gaan inladen.
Het meest logische antwoord, wat ik ook ergens op stackoverflow tegenkwam is
TypeScript:
1
| import maplibregl from 'maplibre-gl'; |
Dit werkt echter niet. De foutmelding is import not found: default
De volgende syntax werkt ook niet:
TypeScript:
1
2
3
4
5
6
7
8
| // Fout: import not found import { maplibregl } from 'maplibre-gl' // Fout: import not found import { Map } from 'maplibre-gl' // Fout: maplibregl.Map is not a constructor import * as maplibregl from 'maplibre-gl' |
De import geheel weghalen geeft de foutmelding dat maplibregl niet gevonden kon worden.
Wat wel werkt is
TypeScript:
1
2
| // Ik kan hier elke letter neerzetten, behalve 'maplibregl' import * as M from 'maplibre-gl' |
Als ik vervolgens in de browser-console M wil bekijken, krijg ik de melding dat M is undefined. Het rare is dat het statement new maplibregl.Map() gewoon werkt, terwijl ik 'maplibregl' of 'map niet heb geladen. Ik krijg bij deze import statement dan ook inderdaad de kaart te zien.
Ik snap dus absoluut niet waarom dit werkt. Nergens in documentatie over javascript modules, typescript en maplibre-gl staat hier iets over.