首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MarkerCluster LeafletJS插件TypeScript定义文件的创建

MarkerCluster LeafletJS插件TypeScript定义文件的创建
EN

Stack Overflow用户
提问于 2013-04-18 14:42:13
回答 4查看 4K关注 0票数 7

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

我有这个插件,它可以编译(在传单定义文件中添加了一些小内容之后),但是当我尝试使用它时,我没有看到它的任何方法(见下面的用法示例)。我也尝试从它创建一个定义文件,但是它创建的是空的(使用tsc --声明)。由于传单和插件的定义文件有点长,所以我上传了它们:

leaflet.d.tsleaflet.markercluster.ts

用法:

代码语言:javascript
运行
复制
/// <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) { }

    }
}

错误:

属性'MarkerClusterGroup‘在'L’类型的值上不存在

关于从这里到哪里有什么想法或指导吗?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-04-18 15:26:50

在JavaScript中创建“类”有很多不同的约定,而TypeScript对其中任何一个都一无所知。您在leaflet.markercluster.ts中拥有的是合法的JavaScript,因此是合法的TypeScript,但是它并没有像TypeScript所理解的那样被分解为类,这就是为什么为它生成的声明文件是空的。

除了很少的情况下,声明文件是手工创建的,这可能是您在这里要做的事情。它可能会以这样的方式开始:

代码语言:javascript
运行
复制
/// <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
    }
}

我不得不自己创建几个声明文件,经过一段短暂的学习曲线后,这并不太难。我发现这篇博客文章对于开始学习非常有帮助(如果你正在阅读这个道具),然后通过实例学习确定类型。

一旦你对你的声明文件感到满意,记得为温暖而模糊的情感做出明确的贡献。

票数 6
EN

Stack Overflow用户

发布于 2016-01-19 17:51:09

在我看来,这种贡献似乎从未发生过,所以我刚刚向DefinitelyTyped leaflet.markercluster提交了一份公关报告,以获得那些温暖而模糊的感觉:)

有大多数常见的选项,但是如果有人添加了更多的(并编写了更多的测试),显然会很喜欢!

https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/leaflet.markercluster/index.d.ts

票数 4
EN

Stack Overflow用户

发布于 2013-04-18 15:21:48

leaflet.marketcluster.ts似乎只是JavaScript代码,它不包含任何TypeScript类声明。

您应该创建一个定义文件leaflet.marketcluster.d.ts (并将原始leaflet.marketcluster代码保留为JavaScript):

代码语言:javascript
运行
复制
declare module L {

    export interface MarkerClusterGroupOptions {
        maxClusterRadius?: number;
        // etc.
    },

    export class MarkerClusterGroup extends FeatureGroup {
        initialize(options: MarkerClusterGroupOptions);
        addLayer(layer: LayerGroup);
        // etc.
    }

    //etc ...
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16086043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档