亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

ev.target 和 Node.contains:EventTarget 不可分配給 Node

ev.target 和 Node.contains:EventTarget 不可分配給 Node

繁星點點滴滴 2023-12-11 15:14:03
這是代碼:function bodyClickHandler(ev: MouseEvent) {    if(containerRef.current && containerRef.current.contains(ev.target)) return;    setOpen(false);}錯誤:'EventTarget | 類型的參數 null' 不可分配給類型為“Node |”的參數 無效的'。類型“EventTarget”缺少類型“Node”中的以下屬性:baseURI、childNodes、firstChild、isConnected 和 44 more.ts(2345)containerRef.current是一個HTMLDivElement. .contains應該是這個功能。不ev.target保證是Node某種類型的嗎?我可以投射它(ev.target as Node),但我試圖弄清楚在什么情況下這可能會失???我可以點擊什么不是節點?
查看完整描述

2 回答

?
四季花海

TA貢獻1811條經驗 獲得超5個贊

簡短的回答:這是由于他們的打字不當造成的。繼續施放吧。

長答案:發生這種情況的原因是因為如果您單擊<svg />按鈕內部(例如),它將event.target指向 SVG,這不能保證是按鈕(顯然)。只有事件currentTarget指向處理程序所在的元素。因此,做出 React 類型的人決定將事件定義currentTarget為我們示例中的內容button,但除了事件是一個 EventTarget 之外,不對事件做出任何保證。target因此,你不得不施放它。



查看完整回答
反對 回復 2023-12-11
?
千萬里不及你

TA貢獻1784條經驗 獲得超9個贊

我剛剛開始使用 Typescript。我有一個類似的問題,我的解決方案是,我知道該事件總是由 DomElement 觸發。


這就是我通知 Typescript 的方式:


function bodyClickHandler(ev: MouseEvent) {

    if(containerRef.current && containerRef.current.contains(ev.target as HTMLElement)) return;

    setOpen(false);

}

如果您喜歡將其分開:


function bodyClickHandler(ev: MouseEvent) {

    const target = ev.target as HTMLElement;

    if(containerRef.current && containerRef.current.contains(target)) return;

    setOpen(false);

}


查看完整回答
反對 回復 2023-12-11
  • 2 回答
  • 0 關注
  • 190 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號