如何为TypeScript声明注册事件处理程序

时间:2013-08-13 00:40:42

标签: javascript typescript bing-maps

我在打字稿的codeplex论坛上问了这个问题,但没有得到答案所以我在这里问。对于给定的TypeScript类声明,例如Bing Maps one(https://bingmapsts.codeplex.com/),如何注册事件处理程序?

在Map类(在Microsoft.Maps.d.ts中)中声明了几个事件:

viewchange: () => any;
viewchangeend: () => any;
viewchangestart: () => any;

我尝试在一个打字稿文件中挂钩一个类似下面的函数,但它永远不会被调用:

///<reference path="Bing/Microsoft.Maps.All.d.ts" />

window.onload = function()
{
    var map = new Microsoft.Maps.Map(document.getElementById('map'),
        {
            backgroundColor: 0,                
        });

    map.click = () => alert('click');
    map.viewchangestart = () => alert('viewchangestart');
}

在传统的javascript中,我会使用以下内容:

Microsoft.Maps.Events.addHandler(map, 'viewchangestart', function (e)
    {
        alert('viewchangestart');
    });

但是在typescript声明中没有这样的方法,因为我似乎无法从.ts文件引用虚拟地球地图控件,我不知道如何做到这一点。

2 个答案:

答案 0 :(得分:1)

定义(https://bingmapsts.codeplex.com/SourceControl/latest#BingTS.Solution/BingTS/Bing/Microsoft.Maps.d.ts)错误:http://msdn.microsoft.com/en-us/library/gg427609.aspx这些函数不存在。您只能通过addHandler注册事件。简单定义:

declare module Microsoft.Maps.Events{
    function addHandler(map:Microsoft.Maps.Map,event:string,func:Function);
}

答案 1 :(得分:0)

.d.ts文件很可能完全错误。它们通常是手工编写的,不应被视为具有权威性。我没有在API参考的options参数中看到对viewchangestart事件对象的任何引用,因此无论谁编写该文件可能只是误读了文档。

就语句或表达式代码而言,无论您在JavaScript中编写什么,都应该使用TypeScript编写。外部API的使用方式没有任何区别。