Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery TypeScript 1.7.6版是否支持touchevents的dts库?_Jquery_Typescript_Definitelytyped - Fatal编程技术网

Jquery TypeScript 1.7.6版是否支持touchevents的dts库?

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

我找到了以下链接:

它处理的是我所面临的问题。根据文章顶部的一篇文章,它指出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文件与上的文件相同

代码片段

$('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)以消除异常。