如何将addEvent函数转换为Typescript?

时间:2019-01-12 04:20:44

标签: typescript

我有一个addEvent函数,我很难弄清楚如何使其在Typescript中工作而不会产生错误。最后输入代码。

错误:

handler()错误: Cannot invoke an expression whose type lacks a call signature. Type '{}' has no compatible call signatures. [2349]

e.addEventListener和其他错误:Property 'addEventListener' does not exist on type 'object'.

我了解这些错误,但是我不知道如何告诉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(window, 'focus', receiveMessage)

如何使Typescript编译?

谢谢

1 个答案:

答案 0 :(得分:1)

可以通过将handler(在函数参数中)的类型更改为Function而不是{}来修复错误“无法调用类型缺少调用签名的表达式” (一个对象)。

关于addEventListener的错误可以通过将e(在函数参数中)的类型从object更改为HTMLElement来解决。如果TypeScript编译器不知道HTMLElement类型,那么您应该可以使用Google搜索快速解决该问题。

您当然可以声明handlere的类型为any。那会很快,但是有点违反了使用TypeScript的目的。