我在打字稿的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文件引用虚拟地球地图控件,我不知道如何做到这一点。
答案 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的使用方式没有任何区别。