我发现以下链接: Does TypeScript support TouchEvent?TypeScript 1.7.6版本是否支持touchevent的dts库?
它处理我遇到的问题。根据文章顶部的帖子,它指出TypeScript 1.5.3将HTML Touch事件的声明添加到lib.d.ts.
TypeScript 1.7.6版是否支持这些触摸事件?我在Visual Studio 2015中发现错误:状态'changedTouches'在'Event'类型上不存在。
需要什么lib.d.ts才能使其工作。我曾尝试使用NuGet下载最新的jquery.TypeScript.DefinitelyTyped版本=“2.8.8”,但似乎不起作用。
有什么建议吗?
更新 我核实,从的NuGet jQuery的d.ts文件相同的https://github.com/DefinitelyTyped/DefinitelyTyped之一。
代码段
$('#previewEvent').on('mousedown touchstart', function(e) {
var original = e.originalEvent;
if (original.changedTouches && CheckMobile.isTouch_p) {
const touchobj = original.changedTouches[0];
swipedir = 'none';
distX = 0;
distY = 0;
startX = touchobj.pageX;
startY = touchobj.pageY;
// record time when finger first makes contact with surface
startTime = new Date().getTime();
return !0;
} else if (!CheckMobile.isTouch_p) {
return !0;
}
return !0;
});
更新 我最初以为指的jQuery的lib.d.ts。我错了,它是与TypeScript一起安装的一个库。
我已经更新了库,但仍然有相同的错误。 lib.d.ts文件似乎具有触摸定义,这是朝着正确方向迈出的一步。
这个问题似乎是jQuery BaseJQueryEventObject接口和TypeScript TouchEvent接口之间的不兼容问题。我不确定如何解决这个问题,但是我可以通过声明var original:any = e.originalEvent来消除错误,它掩盖了不兼容性。
关于如何以正确的方式解决这个问题的任何想法?我猜测它会花费第三个d.ts文件来解决接口问题。
谢谢...
非常感谢您的快速响应。这正是我正在寻找的,但不知道它!你的写作很清楚,很有道理。我之前使用过instanceof,但没有与如何解决TypeScript抱怨的类型差异有关。我最近将TypeScript从1.3.x升级到1.7.6。我将不得不做一些功课,看看还有什么添加。 – Highdown
对于您可能会遇到同样问题的其他人的建议,我有一个小小的更正。当TouchEvent未定义时,第一个if块会引发异常,而不支持触摸的台式机/笔记本电脑就是这种情况。在我的情况下,我修改了第一个if块以包含触摸测试,即(CheckMobile.isTouch_p && TouchEvent的原始实例)以消除该异常。 – Highdown