【问题标题】:Property innerWidth does not exist on type EventTargetEventTarget 类型上不存在属性 innerWidth
【发布时间】:2019-01-28 00:47:54
【问题描述】:

当我运行代码时:

public onResize(event: Event) {
    console.log(event.target.innerWidth);

    //--solution--
    //var w = event.target as Window;
    //console.log(w.innerWidth);
  }

我收到一个错误:

Property innerWidth does not exist on type EventTarget

我想避免在 TypeScript 中扩展类型(如此处所述 Property 'value' does not exist on type 'EventTarget' ),因此我将 event.target 转换为 Window 类。我不确定我是否选择了合适的班级。我应该投到哪个班级?如何找出应该转换到的合适的类?

【问题讨论】:

    标签: javascript typescript casting


    【解决方案1】:
    1. 调整大小事件使用 UIEvent 接口。

      https://developer.mozilla.org/en-US/docs/Web/API/Window/resize_event

    2. 一个 UIEvent 有一个目标属性,不幸的是,它没有“innerWidth”属性。因此,相反,我们将事件的 target 断言为 as Window

    window.addEventListener('resize', (event: UIEvent) => {
      const w = event.target as Window; 
      console.log(w.innerWidth) // works!
    });
    

    【讨论】:

      【解决方案2】:

      如果您知道在哪个元素上注册了事件侦听器,则可以将 event.target 强制转换为该元素类型。我认为没有什么比这更要说的了。或者,您可以直接引用您注册监听器的元素(在本例中只是全局window),而不是使用event.target

      【讨论】:

      • 我知道我注册了事件侦听器的元素,但我不知道元素的类型。例如,假设它是 <canvas> :如果我在画布上注册事件侦听器,如何找出该元素的类型?是Canvas 还是HTMLCanvasElement,或者它们都不是?是否有任何描述 JavaScript 类的文档?我一直在 (developer.mozilla.org) 上寻找它,但我找不到。
      • 对于 ,如果您查看文档 here,“DOM 接口”是 HTMLCanvasElement,这通常也是 TypeScript 中使用的名称。
      猜你喜欢
      • 2016-09-14
      • 2017-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-18
      • 2018-04-30
      • 2021-06-03
      相关资源
      最近更新 更多