Javascript 如何在TypeScript中手动触发TouchEvent

Javascript 如何在TypeScript中手动触发TouchEvent,javascript,typescript,jasmine,karma-jasmine,Javascript,Typescript,Jasmine,Karma Jasmine,我想手动触发触摸事件,但无法呼叫。 这在JavaScript中是可能的,但TypeScript无法实现 例如: let touchStart: TouchEvent = document.createEvent('TouchEvent'); touchStart.initEvent('touchstart', true, true); element.dispatchEvent(touchStart); 如果尝试此操作,我可以触发touchStart事件,但无法获取changedTouc

我想手动触发触摸事件,但无法呼叫。 这在JavaScript中是可能的,但TypeScript无法实现

例如:

 let touchStart: TouchEvent = document.createEvent('TouchEvent');
 touchStart.initEvent('touchstart', true, true);
 element.dispatchEvent(touchStart);
如果尝试此操作,我可以触发touchStart事件,但无法获取
changedTouches[0]。pageX
changedTouches[0]。pageY

根据我的尝试,如下所示

 touchStart.changedTouches = [
    pageX: x
    pageY: y
  ]
但是我无法在
changedtouchs
中指定值,因为该属性是只读的


如何做到这一点?这是TypeScript的
lib.d.ts
的一个实际缺陷,它定义了JavaScript和DOM中所有内容的类型

我已经打开了一个和一个来解决这个问题

如果它们被接受,您可以期望标准方式
newtouchEvent(eventType,initArguments)
在未来版本的TypeScript中工作


请参阅,以了解JavaScript中的正确操作方法。

我最近一直在尝试在TypeScript中触发触摸事件,并遇到了相同的问题。通过观察,我看到了AngleMaterial团队在测试中是如何解决这个问题的,所以我采取了类似的方法。下面是我使用
touchstart
模拟触摸事件的代码示例,并设置了
changedtouchs
mock数组:

let te = createTouchEvent(parentHtmlElement, 'touchstart');
parentHtmlElement.dispatchEvent(te);

function createTouchEvent(touchTarget: HTMLElement, type: string) {        
    const event = document.createEvent('UIEvent');    
    event.initUIEvent(type, true, true, window, 0);

    let touches = [{target: touchTarget}];

    Object.defineProperties(event, {
      changedTouches: {value: touches}
    });    
    return event;
}
在我的组件中,我正在收听以下事件:

 this.touchStartListener = this.renderer.listen('document', 'touchstart', (event: TouchEvent) => {
                    this.handleTouchStart(event);
                });

这非常有效,没有TypeScript警告,事件在我的测试中被触发和处理

非常有趣的是,TypeScript似乎不支持创建
TouchEvent
s,无论是通过
new TouchEvent
还是通过旧的
document.createEvent()
。我想提交一个bug,但我现在时间有点短。@MadaraUchiha这是一个bug?是的,它看起来像是TypeScript中的一个真正bug。我只使用事件的
changedTouches
属性,所以我只将该属性添加到事件中。如果您使用的是
触摸数组
,请添加该数组