Types API Reference
Vue3 MapTiler SDK provides comprehensive TypeScript support with well-defined types and interfaces for all components and composables.
Core Types
MapTilerActions
Enhanced actions interface for map management with additional utility methods.
type MapTilerActions = CreateMapTilerActions & {
setMapOptions: (options: Partial<MapOptions>) => void;
};CreateMapTilerActions
Core actions interface for basic map operations.
interface CreateMapTilerActions {
mapInstance: ComputedRef<Map | null>;
mapCreationStatus: ComputedRef<MapCreationStatus>;
isMapReady: ComputedRef<boolean>;
isMapLoading: ComputedRef<boolean>;
hasMapError: ComputedRef<boolean>;
setCenter: (center: LngLatLike) => void;
setBearing: (bearing: number) => void;
setZoom: (zoom: number) => void;
setPitch: (pitch: number) => void;
setStyle: (style: StyleSpecification | string) => void;
setMaxBounds: (bounds: LngLatBoundsLike) => void;
setMaxPitch: (pitch: number) => void;
setMaxZoom: (zoom: number) => void;
setMinPitch: (pitch: number) => void;
setMinZoom: (zoom: number) => void;
setRenderWorldCopies: (render: boolean) => void;
}MapTilerMethods
Everything CreateMapTilerActions has, plus the map's accessors and the remaining setters. useMapTiler spreads this in, so the composable's return carries each of these; every one of them no-ops while no map is registered, which is why the accessors return undefined rather than throwing.
type MapTilerMethods = CreateMapTilerActions & {
getContainer: () => HTMLElement | undefined;
getCanvasContainer: () => HTMLElement | undefined;
getCanvas: () => HTMLCanvasElement | undefined;
getStyle: () => StyleSpecification | undefined;
getBounds: () => LngLatBoundsLike | undefined;
getCenter: () => LngLatLike | undefined;
getZoom: () => number | undefined;
getBearing: () => number | undefined;
getPadding: () => PaddingOptions | undefined;
getPitch: () => number | undefined;
getMinZoom: () => number | undefined;
getMaxZoom: () => number | undefined;
getMinPitch: () => number | undefined;
getMaxPitch: () => number | undefined;
getFilter: (layerId: string) => void | FilterSpecification;
getLayer: (layerId: string) => any | undefined;
getPaintProperty: (layerId: string, name: string) => any | undefined;
getLayoutProperty: (layerId: string, name: string) => any | undefined;
getSource: (sourceId: string) => any | undefined;
triggerRepaint: () => void;
project: (lnglat: LngLatLike) => Point | undefined;
unproject: (point: Point) => LngLat | undefined;
queryRenderedFeatures: (
point: PointLike | [PointLike, PointLike],
options?: QueryRenderedFeaturesOptions,
) => any[] | undefined;
querySourceFeatures: (
sourceID: string,
options?: QuerySourceFeatureOptions,
) => any[] | undefined;
queryTerrainElevation: (lnglat: LngLatLike) => number | null | undefined;
isStyleLoaded: () => boolean | void;
isMoving: () => boolean | undefined;
isZooming: () => boolean | undefined;
isRotating: () => boolean | undefined;
isEasing: () => boolean | undefined;
resize: () => void;
remove: () => void;
setFeatureState: (
options: FeatureIdentifier,
state: Record<string, any>,
) => void;
removeFeatureState: (options: FeatureIdentifier, key: string) => void;
getFeatureState: (
options: FeatureIdentifier,
) => Record<string, any> | undefined;
setPadding: (padding: PaddingOptions) => void;
};CreateGeoJsonSourceActions
Actions interface for GeoJSON source management.
interface CreateGeoJsonSourceActions {
sourceId: string;
getSource: ShallowRef<GeoJSONSource | null>;
setData: (data: GeoJSONSourceSpecification['data']) => void;
removeSource: () => void;
refreshSource: () => void;
sourceStatus: ComputedRef<SourceStatus>;
isSourceReady: ComputedRef<boolean>;
}CreateLayerActions
Generic actions interface for layer management.
interface CreateBaseLayerActions<Layer extends LayerSpecification> {
layerId: string;
getLayer: ComputedRef<Layer | null>;
setBeforeId: (beforeId?: string) => void;
setFilter: (filter?: FilterSpecification) => void;
setPaintProperty: (
name: string,
value: any,
options?: StyleSetterOptions,
) => void;
setLayoutProperty: (
name: string,
value: any,
options?: StyleSetterOptions,
) => void;
setZoomRange: (minzoom?: number, maxzoom?: number) => void;
removeLayer: () => void;
}
interface CreateLayerActions<Layer extends LayerSpecification>
extends CreateBaseLayerActions<Layer> {
setStyle: (styleVal: AnyLayout & AnyPaint) => void;
}Layer Style Types
FillLayerStyle
Style configuration for fill layers.
interface FillLayerStyle {
'fill-antialias'?: boolean;
'fill-color'?: string | Expressions;
'fill-opacity'?: number | Expressions;
'fill-outline-color'?: string | Expressions;
'fill-pattern'?: string | Expressions;
'fill-translate'?: [number, number] | Expressions;
'fill-translate-anchor'?: 'map' | 'viewport';
}CircleLayerStyle
Style configuration for circle layers.
interface CircleLayerStyle {
'circle-blur'?: number | Expressions;
'circle-color'?: string | Expressions;
'circle-opacity'?: number | Expressions;
'circle-pitch-alignment'?: 'map' | 'viewport';
'circle-pitch-scale'?: 'map' | 'viewport';
'circle-radius'?: number | Expressions;
'circle-stroke-color'?: string | Expressions;
'circle-stroke-opacity'?: number | Expressions;
'circle-stroke-width'?: number | Expressions;
'circle-translate'?: [number, number] | Expressions;
'circle-translate-anchor'?: 'map' | 'viewport';
}LineLayerStyle
Style configuration for line layers.
interface LineLayerStyle {
'line-blur'?: number | Expressions;
'line-cap'?: 'butt' | 'round' | 'square';
'line-color'?: string | Expressions;
'line-dasharray'?: number[] | Expressions;
'line-gap-width'?: number | Expressions;
'line-gradient'?: Expressions;
'line-join'?: 'bevel' | 'round' | 'miter';
'line-miter-limit'?: number | Expressions;
'line-offset'?: number | Expressions;
'line-opacity'?: number | Expressions;
'line-pattern'?: string | Expressions;
'line-round-limit'?: number | Expressions;
'line-translate'?: [number, number] | Expressions;
'line-translate-anchor'?: 'map' | 'viewport';
'line-width'?: number | Expressions;
}SymbolLayerStyle
Style configuration for symbol layers.
interface SymbolLayerStyle {
// Icon properties
'icon-allow-overlap'?: boolean | Expressions;
'icon-anchor'?:
| 'center'
| 'left'
| 'right'
| 'top'
| 'bottom'
| 'top-left'
| 'top-right'
| 'bottom-left'
| 'bottom-right'
| Expressions;
'icon-color'?: string | Expressions;
'icon-halo-blur'?: number | Expressions;
'icon-halo-color'?: string | Expressions;
'icon-halo-width'?: number | Expressions;
'icon-ignore-placement'?: boolean | Expressions;
'icon-image'?: string | Expressions;
'icon-keep-upright'?: boolean | Expressions;
'icon-offset'?: [number, number] | Expressions;
'icon-opacity'?: number | Expressions;
'icon-optional'?: boolean | Expressions;
'icon-overlap'?: 'never' | 'always' | 'cooperative' | Expressions;
'icon-padding'?: number | Expressions;
'icon-pitch-alignment'?: 'map' | 'viewport' | 'auto' | Expressions;
'icon-rotate'?: number | Expressions;
'icon-rotation-alignment'?: 'map' | 'viewport' | 'auto' | Expressions;
'icon-size'?: number | Expressions;
'icon-text-fit'?: 'none' | 'width' | 'height' | 'both' | Expressions;
'icon-text-fit-padding'?: [number, number, number, number] | Expressions;
'icon-translate'?: [number, number] | Expressions;
'icon-translate-anchor'?: 'map' | 'viewport' | Expressions;
// Text properties
'text-allow-overlap'?: boolean | Expressions;
'text-anchor'?:
| 'center'
| 'left'
| 'right'
| 'top'
| 'bottom'
| 'top-left'
| 'top-right'
| 'bottom-left'
| 'bottom-right'
| Expressions;
'text-color'?: string | Expressions;
'text-field'?: string | Expressions;
'text-font'?: string[] | Expressions;
'text-halo-blur'?: number | Expressions;
'text-halo-color'?: string | Expressions;
'text-halo-width'?: number | Expressions;
'text-ignore-placement'?: boolean | Expressions;
'text-justify'?: 'auto' | 'left' | 'center' | 'right' | Expressions;
'text-keep-upright'?: boolean | Expressions;
'text-letter-spacing'?: number | Expressions;
'text-line-height'?: number | Expressions;
'text-max-angle'?: number | Expressions;
'text-max-width'?: number | Expressions;
'text-offset'?: [number, number] | Expressions;
'text-opacity'?: number | Expressions;
'text-optional'?: boolean | Expressions;
'text-overlap'?: 'never' | 'always' | 'cooperative' | Expressions;
'text-padding'?: number | Expressions;
'text-pitch-alignment'?: 'map' | 'viewport' | 'auto' | Expressions;
'text-radial-offset'?: number | Expressions;
'text-rotate'?: number | Expressions;
'text-rotation-alignment'?: 'map' | 'viewport' | 'auto' | Expressions;
'text-size'?: number | Expressions;
'text-transform'?: 'none' | 'uppercase' | 'lowercase' | Expressions;
'text-translate'?: [number, number] | Expressions;
'text-translate-anchor'?: 'map' | 'viewport' | Expressions;
'text-variable-anchor'?:
| (
| 'center'
| 'left'
| 'right'
| 'top'
| 'bottom'
| 'top-left'
| 'top-right'
| 'bottom-left'
| 'bottom-right'
)[]
| Expressions;
'text-writing-mode'?: ('horizontal' | 'vertical')[] | Expressions;
}Enum Types
MapCreationStatus
Status enumeration for map creation lifecycle.
enum MapCreationStatus {
NotInitialized = 'not-initialized',
Initializing = 'initializing',
Loading = 'loading',
Loaded = 'loaded',
Error = 'error',
Destroyed = 'destroyed',
}SourceStatus
Status enumeration for source lifecycle.
enum SourceStatus {
NotCreated = 'not-created',
Creating = 'creating',
Created = 'created',
Error = 'error',
}LayerManagementStatus
Status enumeration for layer management lifecycle.
enum LayerManagementStatus {
NotRegistered = 'not-registered',
Registering = 'registering',
Registered = 'registered',
Error = 'error',
Disposed = 'disposed',
}Utility Types
Nullable
Generic utility type for nullable values.
type Nullable<T> = T | null;MaybeRef
Vue utility type for values that may be reactive references.
type MaybeRef<T> = T | Ref<T>;ImageDatas
Union type for image data formats.
type ImageDatas =
| HTMLImageElement
| ImageBitmap
| ImageData
| {
width: number;
height: number;
data: Uint8Array | Uint8ClampedArray;
};Anchor
Anchor position type for markers and popups.
type Anchor =
| 'center'
| 'top'
| 'bottom'
| 'left'
| 'right'
| 'top-left'
| 'top-right'
| 'bottom-left'
| 'bottom-right';Event Types
GeolocateSuccess
Success event data for geolocation.
interface GeolocateSuccess {
coords: GeolocationCoordinates;
target: GeolocateControl;
timestamp: number;
}GeolocateEventTypes
Event types for geolocation control.
interface GeolocateEventTypes {
geolocate: GeolocateSuccess;
error: GeolocationPositionError;
outofmaxbounds: GeolocateSuccess;
trackuserlocationstart: GeolocateSuccess;
trackuserlocationend: GeolocateSuccess;
}Event Handler Types
These are the function signatures (callback shapes) you use when listening to map, layer, and geolocate events. Use them to type the callback you pass to an event listener or composable, so your editor autocompletes the event payload correctly.
MapClickHandler
The function signature for handling a click anywhere on the map.
type MapClickHandler = (e: MapMouseEvent) => void;const onMapClick: MapClickHandler = (e) => {
console.log('Clicked at', e.lngLat);
};MapMoveHandler
The function signature for handling the map's move event (fired while the map is panned or zoomed).
type MapMoveHandler = (e: Event) => void;const onMapMove: MapMoveHandler = (e) => {
console.log('Map is moving');
};MapZoomHandler
The function signature for handling the map's zoom event.
type MapZoomHandler = (e: Event) => void;const onMapZoom: MapZoomHandler = (e) => {
console.log('Map zoom changed');
};MapTouchHandler
The function signature for handling touch interactions on the map (tap, swipe, pinch) on touch devices.
type MapTouchHandler = (e: MapTouchEvent) => void;const onMapTouch: MapTouchHandler = (e) => {
console.log('Touched at', e.lngLat);
};MapWheelHandler
The function signature for handling mouse wheel scroll events on the map (used for scroll-to-zoom).
type MapWheelHandler = (e: MapWheelEvent) => void;const onMapWheel: MapWheelHandler = (e) => {
console.log('Wheel delta', e.originalEvent.deltaY);
};LayerClickHandler
The function signature for handling a click on a specific layer. The event includes the features under the pointer, so you can read which feature(s) were clicked.
type LayerClickHandler = (
e: MapMouseEvent & { features?: GeoJSON.Feature[] },
) => void;<script setup lang="ts">
import { GeoJsonSource, CircleLayer } from 'vue3-maptiler-gl';
import type { LayerClickHandler } from 'vue3-maptiler-gl';
const points = ref({
type: 'FeatureCollection',
features: [],
});
const circleStyle = ref({
'circle-radius': 6,
'circle-color': '#007cbf',
});
const onLayerClick: LayerClickHandler = (e) => {
console.log('Clicked feature:', e.features?.[0]);
};
</script>
<template>
<GeoJsonSource :data="points">
<CircleLayer id="points" :style="circleStyle" @click="onLayerClick" />
</GeoJsonSource>
</template>LayerMouseHandler
The function signature for handling mouse events on a layer, such as hover (mouseenter/mousemove/mouseleave). Like LayerClickHandler, it also exposes the features under the pointer.
type LayerMouseHandler = (
e: MapMouseEvent & { features?: GeoJSON.Feature[] },
) => void;<script setup lang="ts">
import { GeoJsonSource, FillLayer } from 'vue3-maptiler-gl';
import type { LayerMouseHandler } from 'vue3-maptiler-gl';
const regions = ref({
type: 'FeatureCollection',
features: [],
});
const fillStyle = ref({
'fill-color': '#41B883',
'fill-opacity': 0.6,
});
const onLayerHover: LayerMouseHandler = (e) => {
console.log('Hovering feature:', e.features?.[0]);
};
</script>
<template>
<GeoJsonSource :data="regions">
<FillLayer id="regions" :style="fillStyle" @mousemove="onLayerHover" />
</GeoJsonSource>
</template>GeolocateHandler
The function signature for handling a successful geolocation result (e.g. when the user's location is found by the geolocate control).
type GeolocateHandler = (e: GeolocateSuccess) => void;const onGeolocate: GeolocateHandler = (e) => {
console.log('User is at', e.coords.latitude, e.coords.longitude);
};GeolocateErrorHandler
The function signature for handling a geolocation failure (e.g. the user denied location permission).
type GeolocateErrorHandler = (e: GeolocationPositionError) => void;const onGeolocateError: GeolocateErrorHandler = (e) => {
console.error('Geolocation failed:', e.message);
};Re-exported MapTiler SDK Types
Vue3 MapTiler SDK re-exports all relevant MapTiler SDK types for convenience:
Map,LngLat,LngLatBounds,Point,MercatorCoordinateMapOptions,LngLatLike,LngLatBoundsLike,PointLikeStyleSpecification,LayerSpecification,SourceSpecificationFilterSpecification,ExpressionSpecificationMapEventType,MapLayerEventType,MapMouseEvent,MapTouchEventGeolocateControl,NavigationControl,ScaleControl- And many more...
For complete type definitions, refer to the MapTiler SDK documentation.