我大致有以下几点:检测是否点击了里面的反应成分或不打字稿
componentDidMount() {
document.querySelector('body')!.addEventListener('click', this.click);
}
click = (e: Event) => {
if (this.state.toggled) {
if (!ReactDom.findDOMNode(this.someRef).contains(e.target)) {
this.setState({ toggled: false });
}
}
};
render() {
return (<CustomElement
ref={(e) => { this.someRef = e; }}
/>)
}
此代码正确检测用户是否点击内部或外部的CustomElement,到目前为止,一切顺利。
然而,tsc
是不满意这点在所有:
error TS2345: Argument of type 'EventTarget' is not assignable to parameter of type 'Node'.
Property 'attributes' is missing in type 'EventTarget'.
看着node_modules/typescript/lib/lib.d.ts
这是有道理的,因为e.target
是这似乎只定义添加和删除事件处理程序的功能的EventTarget
。但是MDN表示e.target是“对派发事件的对象的引用”。这听起来更接近我想要的。
那么如何保留当前的工作功能,同时也让tsc变得快乐(而不仅仅是消除错误)呢?
我对这里的好处有点不清楚,看起来像这样让沉默了错误,因此tsc现在会假定内部代码永远不会运行,因为它会考虑instanceof检查总是失败? – Letharion
试试吧。我测试了建议的代码,它实际上总是成功,因为HtmlElement是其他元素的基础。它不会真正消除错误(不像铸造成任何东西) - 相反,它会执行有效的检查,如果它是真的,则继续。 – Amid
我附上了一个例子供您检查。 – Amid