键盘事件打字稿键初始化不正确



我正在尝试在打字稿中创建键盘事件类型的事件

const arrowLeft = new KeyboardEvent('keydown', { key: 'ArrowLeft' });
console.log(arrowLeft.keyCode, arrowLeft.key, arrowLeft.code);

我希望看到arrowLeft.keyCode是37,但我得到0, 'Left', ''作为响应。同时,我无法更改arrowLeft并手动设置keyCode,因为它在KeyboardEvent界面中是只读的。

有人知道这是否是打字稿问题吗?如何创建以 37 作为键码的事件?我正在尝试对角度组件进行测试。

我仍然认为这是打字稿方面的错误,因为 LanguageEvent 具有初始值设定项。无论如何,对我有用的解决方法是使用 Object.define 来设置 keyCode。

Object.defineProperty(arrowRight, 'keyCode', {
get : () => 39
});
console.log(arrowRight.keyCode, arrowRight.key, arrowRight.code);

无论 keyCode 是否被弃用,这并不意味着初始值设定项不应该支持它。最有力的论据是,Internet Explorer 9 和 11 依赖于此,它们不支持代码 https://caniuse.com/#search=event.code 或完全支持密钥 https://caniuse.com/#search=event.key 所以我认为 LanguageEvent 应该允许 keyCode 在其初始值设定项中。

let arrowRight = new KeyboardEvent('keydown', { keyCode: 39 });

最新更新