typescript - MarkerCluster LeafletJS 插件 TypeScript 定义文件创建

标签 typescript leaflet

我正在使用 LeafletJS 绘制平面图。我最近在 DevIntersection 学习了一些关于 TypeScript 的知识,并想开始转换我所有的 JS 来使用它。幸运的是,有人已经为 Leaflet 创建了定义文件,但是我使用的其中一个插件没有(MarkerCluster)。

我已经将插件编译到可以编译的地步(在向传单定义文件添加了一些小内容之后),但是当我尝试使用它时,我没有看到它的任何方法(请参阅下面的用法示例)。我还尝试从中创建一个定义文件,但它创建的是空的(使用 tsc --declaration)。由于Leaflet和插件的定义文件有点长,我上传了它们:

leaflet.d.ts , leaflet.markercluster.ts

用法:

/// <reference path="typings/jquery/jquery.d.ts" />
/// <reference path="typings/jqueryui/jqueryui.d.ts" />
/// <reference path="typings/leaflet/leaflet.d.ts" />
/// <reference path="typings/leaflet.markercluster.ts" />

module FloorPlans
{
    export class Floor
    {
        deskMarkers : L.MarkerClusterGroup; // <-- Compile error
        peopleMarkers: L.MarkerClusterGroup; // <-- Compile error
        tileLayer: L.TileLayer;
        desks = new Object();
        people = new Object();

        constructor(public floorName: string, public floorID: number) { }

    }
}

错误:

The property 'MarkerClusterGroup' does not exist on value of type 'L'

关于从这里到哪里去的任何想法或指导?

最佳答案

在 JavaScript 中创建“类”有很多不同的约定,而 TypeScript 对它们一无所知。您在 leaflet.markercluster.ts 中拥有的是合法的 JavaScript,因此也是合法的 TypeScript,但它没有按照 TypeScript 理解的方式分解为类,这就是为其生成的声明文件为空的原因。

除了在极少数情况下,声明文件是手动创建的,这可能是您在这里必须要做的。它可能会像这样开始:

/// <reference path="leaflet.d.ts" />
declare module L {
    export class MarkerClusterGroup extends FeatureGroup {
        initialize(options: any): void;
        addLayer(layer:ILayer):MarkerClusterGroup;
        addLayer(layer:LayerGroup):MarkerClusterGroup;
        // and so on and so forth
    }
}

我必须自己创建几个声明文件,经过短暂的学习曲线后,这并不难。我找到了 this blog post对入门非常有帮助(如果你正在阅读这篇文章,史蒂夫的 Prop )然后通过示例学习 definitelytyped。

一旦您对声明文件感到满意,请记得回馈 definitelytyped 以获得温暖的模糊感觉。

关于typescript - MarkerCluster LeafletJS 插件 TypeScript 定义文件创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16086043/

相关文章:

javascript - 获取数字模数范围以使返回值位于最小范围值和最大范围值之间的正确方法是什么?

javascript - Leaflet.draw 阻止事件

typescript - 推断链式函数的 ReturnType<>

reactjs - create-react-app with --template typescript 不创建 .tsx 文件

html - R传单-无法导出 map

r - 带传单/R的时间 slider

r - 向传单 map 添加任意图像

typescript - 如何使用 Typescript 3.2.2 进行命令行编译?

javascript - 过多的变量声明是否会对性能产生重大影响?

java - 如何处理时区来计算滞后