Javascript 如何在IE和PhantomJS中使用Typescript创建键盘事件

Javascript 如何在IE和PhantomJS中使用Typescript创建键盘事件,javascript,internet-explorer,testing,phantomjs,keyboard-events,Javascript,Internet Explorer,Testing,Phantomjs,Keyboard Events,我正在使用Angular2,并且有一个接受KeyboardEvent对象的方法。我想为这种方法编写测试(如果有必要的话,使用Karma和Jasmine) 我使用KeyboardEvent构造函数编写了一些代码,它在Chrome中运行良好,但在IE和PhantomJS中失败。有没有一种方法可以在这些浏览器中使用 方法签名: public onDateKeypress(evt: KeyboardEvent): boolean { // ... } 当前测试示例: let ke = new

我正在使用Angular2,并且有一个接受KeyboardEvent对象的方法。我想为这种方法编写测试(如果有必要的话,使用Karma和Jasmine)

我使用KeyboardEvent构造函数编写了一些代码,它在Chrome中运行良好,但在IE和PhantomJS中失败。有没有一种方法可以在这些浏览器中使用

方法签名:

public onDateKeypress(evt: KeyboardEvent): boolean {
    // ...
}
当前测试示例:

let ke = new KeyboardEvent("keypress", { "key": "" + i, });
onDateKeypress(ke);

这就是我的结局,我愿意接受更好的解决方案

let ke = <KeyboardEvent>{ "key": "" + i, };
onDateKeypress(ke);
让ke={“key”:“+i,};
onDateKeypress(ke);
说明: typescript代码将被编译成Javascript,Javascript不关心数据的“类型”,只关心对象上有正确的属性/方法

在我的例子中,onDateKeypress方法只使用evt参数的“key”属性,所以这就是我需要在测试对象上设置的全部内容


将annonymous对象强制转换为KeyboardEvent事件是必需的,这样Typescript就可以毫无怨言地编译,因为该方法需要KeyboardEvent类型的对象。

知道这是为什么吗,我对这个空间很陌生,昨天觉得我所有的测试都通过了(在本地运行Chrome),最终破坏了在幻影中运行的构建:)@GaryO'Donoghue我已经编辑了答案并给出了解释。希望这能有所帮助。谢谢你,你能澄清一下为什么使用“new KeyboardEvent”方法会导致问题吗?虽然我认为这也能实现同样的效果,但构造函数中的一个缺陷似乎是没有正确设置“key”属性,或者幻影处理不同的事情somehow@GaryODonoghue说,我认为这只是构造器没有在Phantom(或IE)中实现,就像许多新功能没有在每个浏览器中实现一样。