如何将addEvent函数转换为Typescript?

如何将addEvent函数转换为Typescript?,typescript,Typescript,我有一个addEvent函数,我很难弄清楚如何使它在Typescript中工作而不出现尖叫错误。代码在最后 错误: public addEvent(e:object, evt:string, handler:object ) { console.log('_addEvent', e, evt) if (evt == 'ready') { // Check if the document is already ready if (document.re

我有一个
addEvent
函数,我很难弄清楚如何使它在Typescript中工作而不出现尖叫错误。代码在最后

错误:

  public addEvent(e:object, evt:string, handler:object ) {
    console.log('_addEvent', e, evt)

    if (evt == 'ready') {
      // Check if the document is already ready
      if (document.readyState != 'loading') {
        console.log('Document is ready')
        handler()
        return false
      } else {
        evt = events.DOMContentLoaded
      }
    }

    if (typeof handler !== 'function') return

    if (e.addEventListener) e.addEventListener(evt, handler, false)
    else if (e.attachEvent) e.attachEvent('on' + evt, handler)
    else {
      var oldHandler = e['on' + evt]
      function newHandler(event) {
        handler.call(e, event)
        if (typeof oldhandler === 'function') oldhandler.call(e, event)
      }
    }
  }
handler()
错误:
无法调用其类型缺少调用签名的表达式。类型“{}”没有兼容的调用签名。[2349]

e.addEventListener
和其他错误:
类型“object”上不存在属性“addEventListener”。

我理解这些错误,但我不知道如何告诉Typescript这些值是有效的

Typescript版本3.2.2

功能:

  public addEvent(e:object, evt:string, handler:object ) {
    console.log('_addEvent', e, evt)

    if (evt == 'ready') {
      // Check if the document is already ready
      if (document.readyState != 'loading') {
        console.log('Document is ready')
        handler()
        return false
      } else {
        evt = events.DOMContentLoaded
      }
    }

    if (typeof handler !== 'function') return

    if (e.addEventListener) e.addEventListener(evt, handler, false)
    else if (e.attachEvent) e.attachEvent('on' + evt, handler)
    else {
      var oldHandler = e['on' + evt]
      function newHandler(event) {
        handler.call(e, event)
        if (typeof oldhandler === 'function') oldhandler.call(e, event)
      }
    }
  }
它的名称
addEvent(窗口“焦点”,接收消息)

如何使Typescript编译

感谢

通过将
处理程序
(在函数参数中)的类型更改为
函数
,而不是
{}
(对象),可以修复错误“无法调用其类型缺少调用签名的表达式”

通过将
e
(在函数参数中)的类型从
object
更改为
HTMLElement
,可以解决有关
addEventListener
的错误。如果TypeScript编译器不知道
HTMLElement
类型,您应该能够通过谷歌搜索快速解决这个问题


当然,您可以将
handler
e
声明为
any
类型。这会很快,但有点违背了使用TypeScript的目的。

除了函数之外,在这里可以传递什么类型的处理程序,以便调用是合理的?什么是
e
参数?哦,是的,我更新了帖子
e
是事件附加到的对象<代码>处理程序是回调函数。很高兴我能帮上忙!TypeScript中的类型系统非常强大。可以做的比基本类型多得多。另一方面,NPM上有很多流行javascript库的TypeScript类型定义。一旦为其中一个库安装了类型定义,编译器将确保向这些函数传递正确类型的参数。我很感激你的帮助,你太棒了。