我有一个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编译?
谢谢
答案 0 :(得分:1)
可以通过将handler
(在函数参数中)的类型更改为Function
而不是{}
来修复错误“无法调用类型缺少调用签名的表达式” (一个对象)。
关于addEventListener
的错误可以通过将e
(在函数参数中)的类型从object
更改为HTMLElement
来解决。如果TypeScript编译器不知道HTMLElement
类型,那么您应该可以使用Google搜索快速解决该问题。
您当然可以声明handler
和e
的类型为any
。那会很快,但是有点违反了使用TypeScript的目的。