に反応する検出した場合、私は、次のおおよそ持っている:クリックが内側だったコンポーネントまたはないtypescriptです
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'.
はe.target
が唯一のイベントハンドラを追加および削除するための関数を定義するように見えるEventTarget
あるので、これは、理にかなってnode_modules/typescript/lib/lib.d.ts
を見てみます。しかしMDNはe.targetが "イベントをディスパッチしたオブジェクトへの参照"であると言いますそれは私が望むものに近い音です。
私は現在どのように機能していますか?また、tscを喜ばせると同時に(エラーを抑止するのではなく)?
ここでは何のメリットがあるのか不明ですが、このエラーが消えるように見えるので、tscはinstanceofチェックが常に失敗すると考えられるため、内部コードが実行されないと仮定します。 – Letharion
試してみてください。私は提案されたコードをテストしました。実際には、HtmlElementが他の要素のベースになるので常に成功します。そして、それは本当にエラーを沈黙させることはありません(キャストとは異なります)。それは有効なチェックを行い、それが真であれば続行します。 – Amid
私はあなたがチェックするための例を添付しました。 – Amid