Jquery TypeScript 1.7.6版是否支持touchevents的dts库?
我找到了以下链接: 它处理的是我所面临的问题。根据文章顶部的一篇文章,它指出TypeScript 1.5.3在lib.d.ts中添加了HTML触摸事件声明 TypeScript 1.7.6版是否支持这些触摸事件?我在Visual Studio 2015中收到一个错误,该错误声明:类型“Event”上不存在属性“changedTouches” 需要什么样的lib.d.ts才能让它工作。我曾尝试使用NuGet下载最新的jquery.TypeScript.DefinitelyTyped version=“2.8.8”,但这似乎不起作用 有什么建议吗 更新 我验证了NuGet中的jquery d.ts文件与上的文件相同 代码片段Jquery TypeScript 1.7.6版是否支持touchevents的dts库?,jquery,typescript,definitelytyped,Jquery,Typescript,Definitelytyped,我找到了以下链接: 它处理的是我所面临的问题。根据文章顶部的一篇文章,它指出TypeScript 1.5.3在lib.d.ts中添加了HTML触摸事件声明 TypeScript 1.7.6版是否支持这些触摸事件?我在Visual Studio 2015中收到一个错误,该错误声明:类型“Event”上不存在属性“changedTouches” 需要什么样的lib.d.ts才能让它工作。我曾尝试使用NuGet下载最新的jquery.TypeScript.DefinitelyTyped versio
$('previewEvent')。在('mousedown touchstart',函数(e)上{
var原始=e.原始事件;
if(original.changedtouchs&&CheckMobile.isTouch\p){
const touchobj=original.changedTouches[0];
swipedir=‘无’;
distX=0;
distY=0;
startX=touchobj.pageX;
startY=touchobj.pageY;
//记录手指首次接触表面的时间
startTime=新日期().getTime();
返回!0;
}否则如果(!CheckMobile.isTouch\p){
返回!0;
}
返回!0;
});处理函数e
中的code>属于jqueryventobject
类型
originalEvent
来自basejqueryventobject
,属于事件类型。这个事件
就是我们回到lib.d.ts的地方。目前一切正常
因为Event
是许多派生事件类型(如GamepadEvent
、MutationEvent
等)的基本接口,所以它只包含所有这些事件类型的共享数据字段。这就是为什么您无法访问changedTouches
,因为就TypeScript编译器而言,它不是TouchEvent
我将使用TypeScript 1.4中引入的一个名为
JavaScript中的一种常见模式是在运行时使用typeof或instanceof检查表达式的类型。TypeScript现在理解这些条件,并在if块中使用时相应地更改类型推断
因为您正在为mousedown
和touchtstart
事件指定相同的处理程序,e.originalEvent
可以是MouseEvent
或touchtevent
所以你必须处理这两种情况:
$("#previewEvent").on("mousedown touchstart", function(e) {
var original = e.originalEvent;
if(original instanceof TouchEvent) {
// Handling the touchstart event
} else if(original instanceof MouseEvent) {
// Handling the mousedown event
}
});
好消息是,正如引文所说,您将在if语句的每个分支中获得适当的自动完成支持。非常感谢您的快速响应。这正是我一直在寻找的,但我并不知道!你写的很清楚,很有道理。我以前使用过instanceof,但没有涉及如何解决TypeScript所抱怨的类型差异。我最近将TypeScript从1.3.x升级到1.7.6。我得做一些家庭作业,看看还有什么补充。我对你的建议有一点小小的修正,供其他可能有同样问题的人参考。当TouchEvent未定义为不支持触摸的台式机/笔记本电脑时,第一个if块引发异常。在我的例子中,我修改了第一个if块以包含一个touch测试,即(CheckMobile.isTouch\u p&&original instanceof TouchEvent)以消除异常。