0

我在 typescript 的 codeplex 论坛上问过这个问题,但没有得到答案,所以我在这里问。对于给定的 TypeScript 类声明,例如 Bing 地图 ( 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');
    });

但是打字稿声明中没有这样的方法,因为我似乎无法从 .ts 文件中引用虚拟地球地图控件,所以我不确定我该怎么做。

4

2 回答 2

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);
}
于 2013-08-13T01:24:19.883 回答
0

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

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

于 2013-08-13T01:03:53.197 回答