如何将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类型定义。一旦为其中一个库安装了类型定义,编译器将确保向这些函数传递正确类型的参数。我很感激你的帮助,你太棒了。