我正在使用LeafletJS绘制平面图。最近,我在TypeScript上学到了一些关于DevIntersection的知识,并希望开始转换我所有的JS来使用它。幸运的是,已经有人为传单创建了定义文件,但我使用的插件中没有一个(MarkerCluster)。
我有这个插件,它可以编译(在传单定义文件中添加了一些小内容之后),但是当我尝试使用它时,我没有看到它的任何方法(见下面的用法示例)。我也尝试从它创建一个定义文件,但是它创建的是空的(使用tsc --声明)。由于传单和插件的定义文件有点长,所以我上传了它们:
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) { }
}
}
错误:
属性'MarkerClusterGroup‘在'L’类型的值上不存在
关于从这里到哪里有什么想法或指导吗?
发布于 2013-04-18 15:26:50
在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
}
}
我不得不自己创建几个声明文件,经过一段短暂的学习曲线后,这并不太难。我发现这篇博客文章对于开始学习非常有帮助(如果你正在阅读这个道具),然后通过实例学习确定类型。
一旦你对你的声明文件感到满意,记得为温暖而模糊的情感做出明确的贡献。
发布于 2016-01-19 17:51:09
在我看来,这种贡献似乎从未发生过,所以我刚刚向DefinitelyTyped leaflet.markercluster提交了一份公关报告,以获得那些温暖而模糊的感觉:)
有大多数常见的选项,但是如果有人添加了更多的(并编写了更多的测试),显然会很喜欢!
发布于 2013-04-18 15:21:48
leaflet.marketcluster.ts
似乎只是JavaScript代码,它不包含任何TypeScript类声明。
您应该创建一个定义文件leaflet.marketcluster.d.ts
(并将原始leaflet.marketcluster
代码保留为JavaScript):
declare module L {
export interface MarkerClusterGroupOptions {
maxClusterRadius?: number;
// etc.
},
export class MarkerClusterGroup extends FeatureGroup {
initialize(options: MarkerClusterGroupOptions);
addLayer(layer: LayerGroup);
// etc.
}
//etc ...
}
https://stackoverflow.com/questions/16086043
复制相似问题