2013-04-18 60 views
6

我正在使用LeafletJS繪製出平面圖。我最近在DevIntersection上學到了一點關於TypeScript的知識,並想開始轉換我的所有JS以使用它。幸運的是,有人已經爲Leaflet創建了定義文件,但是我使用的一個插件沒有一個(MarkerCluster)。MarkerCluster LeafletJS插件TypeScript定義文件創建

我有插件到它編譯的地步(在傳單定義文件的一些小的添加之後),但是當我嘗試使用它時,我沒有看到它的任何方法(參見下面的使用示例)。我也嘗試從它創建一個定義文件,但它創建的是空的(使用tsc --declaration)。自定義文件傳單和插件都有點長我上傳他們:

leaflet.d.tsleaflet.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'

任何意見或指導從哪裏出發?

+0

小麻煩,但它是(對於我們這些想幫助你更容易),如果你創建了一個要點,以託管文件更好(HTTP ://gist.github.com)。 –

+0

@AlexDresko不知道這一點 - 我將確保下次使用它。謝謝! – Doug

回答

5

有很多不同的約定的JavaScript中創建「類」和打字稿沒有按」不瞭解任何關於他們的事情。您在leaflet.markercluster.ts中擁有的是合法的JavaScript,因此是合法的TypeScript,但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對於入門(道具如果你正在閱讀這篇文章的道具),然後通過絕對的例子學習很有幫助。

一旦你對你的宣言文件感到滿意,請記住回饋給絕對溫暖的模糊感受。

+0

感謝您的詳細信息,並且博客條目看起來非常有幫助。一旦我獲得了這個良好的狀態,我將會把它返回給明確的 – Doug

+1

+1'溫暖的模糊感受' – MiMo

2

leaflet.marketcluster.ts似乎只是JavaScript代碼,它不包含任何TypeScript類聲明。

您應該創建一個定義文件leaflet.marketcluster.d.ts代替(並保持原來的leaflet.marketcluster代碼只是JavaScript的):

declare module L { 

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

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

    // . . . etc. . . . 
} 
+0

太棒了,謝謝!這有助於清理我需要做的事 – Doug

4

它看起來對我來說,貢獻從來沒有發生過,所以我就提交了一份公關DefinitelyTyped爲leaflet.markercluster讓那些溫暖和模糊的感覺:)

擁有最常見的選擇,但顯然會愛如果有人增加了更多的(並寫更多的測試!)

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

+0

任何機會,你可以評論類似的聲明,我試圖爲傳單路徑轉換?提前致謝! http://stackoverflow.com/questions/42303181 – carpiediem