我正在尝试为mapbox-gl-draw项目创建一个类型化的定义。但失败了。有人可以给出一些提示吗?
javascript文件就像这样
'use strict';
var Setup = require('./src/setup');
var Options = require('./src/options');
var API = require('./src/api');
const Constants = require('./src/constants');
var Draw = function(options) {
options = Options(options);
var ctx = {
options: options
};
var api = API(ctx);
ctx.api = api;
var setup = Setup(ctx);
api.addTo = setup.addTo;
api.remove = setup.remove;
api.types = Constants.types;
api.options = options;
return api;
};
module.exports = Draw;
window.mapboxgl = window.mapboxgl || {};
window.mapboxgl.Draw = Draw;
我的index.d.ts就像
declare namespace mapboxgl {
export function Draw(options?:any):any
}
declare module 'mapbox-gl-draw' {
export = mapboxgl;
}
答案 0 :(得分:1)
此扩展的最佳类型目前位于此 git 问题中:
https://github.com/mapbox/mapbox-gl-draw/issues/842
不清楚为什么他们没有成功提交给绝对类型。包括以下内容供后代使用:
declare module '@mapbox/mapbox-gl-draw' {
import {Feature, FeatureCollection} from 'geojson'
import {IControl} from 'mapbox-gl'
import {IMapboxDrawControls} from '@mapbox/mapbox-gl-draw'
namespace MapboxDraw {
export interface IMapboxDrawControls {
point?: boolean,
line_string?: boolean,
polygon?: boolean
trash?: boolean,
combine_features?: boolean,
uncombine_features?: boolean
}
}
class MapboxDraw implements IControl {
getDefaultPosition: () => string
constructor(options?: {
displayControlsDefault?: boolean,
keybindings?: boolean,
touchEnabled?: boolean,
boxSelect?: boolean,
clickBuffer?: number,
touchBuffer?: number,
controls?: IMapboxDrawControls,
styles?: object[],
modes?: object,
defaultMode?: string,
userProperties?: boolean
});
public add(geojson: object): string[]
public get(featureId: string): Feature | undefined
public getFeatureIdsAt(point: { x: number, y: number }): string[]
public getSelectedIds(): string[]
public getSelected(): FeatureCollection
public getSelectedPoints(): FeatureCollection
public getAll(): FeatureCollection
public delete(ids: string | string[]): this
public deleteAll(): this
public set(featureCollection: FeatureCollection): string[]
public trash(): this
public combineFeatures(): this
public uncombineFeatures(): this
public getMode(): string
public changeMode(mode: string, options?: object): this
public setFeatureProperty(featureId: string, property: string, value: any): this
onAdd(map: mapboxgl.Map): HTMLElement
onRemove(map: mapboxgl.Map): any
}
export = MapboxDraw
}
答案 1 :(得分:0)
对于这个javascript:
var map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v8',
center: [40, -74.50],
zoom: 9
});
您可以创建mapOptions:
interface MapOptions {
container?: string;
style?: string,
center?: number[];
zoom?: number;
}
declare module "mapbox-gl-draw" {
}