جاوااسکریپت - فراخوانی متد MarkerClusterer گوگل مپ از کنترلر انگولار مبتنی بر تایپاسکریپت


من شروع به بررسی روش تایپاسکریپت در پروژه خود کردهام و در حال حاضر کمی گیج هستم که چگونه بهدرستی فراخوانی متد MarkerClusterer را سازماندهی کنم. در حال حاضر من ارجاعات به تعریفهای نوع را دارم:

///<reference path="../../typings/angularjs/angular.d.ts" /> 
///<reference path="../../typings/google.maps.d.ts" /> 

اما برای MarkerClusterer js نتوانستم کتابخانه تعریف ts پیدا کنم. کد من اکنون به این صورت است:

class paspController {

public map: any;
public markers;
public mapTab: boolean;
public currentId: number;

//Some code

showTab(tabIndex: number) {
    if (tabIndex == 2) {
        this.mapTab = true;
        var that = this;
        setTimeout(function () {
            this.options = {
                zoom: 2,
                center: new google.maps.LatLng(1, 1),
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            if (!that.map) {
                that.map = new google.maps.Map(document.getElementById('map'), this.options);
            }
            jQuery.ajax({
                type: "GET",
                url: 'GetDivesWithCoordinates/' + that.currentId,
                success: function (data) {                      
                    that.markers = [];
                    var marker;                       
                    for (var i = 0; i < data.length; i++) {
                        marker = new google.maps.Marker({ map: that.map, draggable: false, title: data[i].Location + ": " + data[i].DiveComment, position: new google.maps.LatLng(data[i].CoordinateX, data[i].CoordinateY) });
                        that.markers.push(marker);
                    }
                   // THIS IS MY PROBLEM => var markerCluster = new MarkerClusterer(that.map, markers);
                },
                error: function (e) {
                },
                async: false
            });
        }, 100);           
    }
}

چطور باید به درستی MarkerClusterer را صدا بزنم، یا شاید باید آن را خارج از منطق کنترلکننده قرار دهم؟

پاسخ شماره ۱

این مشکل من است => var markerCluster=new MarkerClusterer(that.map, markers);

اعلام کنید :

declare var MarkerClusterer:any;

و تایپاسکریپت دیگر شکایتی نخواهد داشت.

بیشتر: http://basarat.gitbooks.io/typescript/content/docs/types/migrating.html

پاسخ شماره ۲

به جای اضافه کردن اسکریپتها به طور مستقیم در انگولار، از بسته npm زیر استفاده کنید.

این بسته را به node_modules خود اضافه کنید

npm i @googlemaps/markerclustererplus

این را در فایل Ts خود وارد کنید:

import MarkerClusterer from '@googlemaps/markerclustererplus';

const markerCluster = new MarkerClusterer(map, markers);

مرجع: https://github.com/googlemaps/js-markerclustererplus