網站首頁 編程語言 正文
引言
原文鏈接:bobbyhadz.com/blog/react-…
作者:Borislav Hadzhiev
正文從這開始~
總覽
當我們不在事件處理函數中為事件聲明類型時,會產生"Parameter 'event' implicitly has an 'any' type"錯誤。為了解決該錯誤,顯示地為event
參數聲明類型。
比如說,在input
元素上,將處理change
事件聲明類型為React.ChangeEvent<HTMLInputElement>
。
這里有個示例用來展示錯誤是如何發生的。
// App.tsx function App() { // ?? Parameter 'event' implicitly has an 'any' type.ts(7006) const handleChange = event => { console.log(event.target.value); console.log(event.target); }; return ( <div> <input onChange={handleChange} type="text" id="message" /> </div> ); } export default App;
示例中的問題在于,我們沒有顯示地為事件處理函數的event
參數聲明類型。
設置類型
為了解決該錯誤,我們必須根據事件類型為參數設置一個類型。
// App.tsx function App() { const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => { console.log(event.target.value); console.log(event.target); }; return ( <div> <input onChange={handleChange} type="text" id="message" /> </div> ); } export default App;
我們將事件的類型聲明為React.ChangeEvent<HTMLInputElement>
,因為我們正在為input
元素聲明一個onChange
事件。
你要找出事件的類型,最簡單的方法是將事件處理器內聯編寫,并將鼠標懸浮在函數的event
參數上。
// App.tsx function App() { // ??? event is written inline return ( <div> <input onChange={e => console.log(e.target.value)} type="text" id="message" /> </div> ); } export default App;
截圖顯示,當我們將鼠標懸浮在內聯事件處理器的e
變量上時,我們得到了事件的正確類型。
這種方法適用于所有的事件處理器,一旦你知道了事件的正確類型,你就可以提取處理函數并正確對其類型聲明。
下面是一個例子,說明如何用同樣的方法確定onClick
事件的類型。
// App.tsx function App() { // ??? event is written inline return ( <div> <button onClick={e => console.log(e)}>Click</button> </div> ); } export default App;
我們將鼠標懸浮在內聯的e
參數上,并發現其類型是什么。現在我們能夠將事件處理程序提取到一個函數中。
// App.tsx function App() { const handleClick = (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => { console.log(e.target); }; return ( <div> <button onClick={handleClick}>Click</button> </div> ); } export default App;
現在事件的類型正確了。我們不會得到"Parameter 'event' implicitly has an 'any' type"錯誤。
逃生艙any
如果你不想正確地為事件聲明類型,你只是想擺脫錯誤,那么可以將事件類型設置為any
。
// App.tsx function App() { // ??? explicitly set type to any const handleClick = (e: any) => { console.log(e.target); }; return ( <div> <button onClick={handleClick}>Click</button> </div> ); } export default App;
在TypeScript中,any
類型可以有效地關閉類型檢查。因此,我們現在可以在event
上訪問任何屬性。
這樣就解決了錯誤,因為現在事件被顯式地設置為any
類型,而之前是隱式地設置為any
類型。
然而,一般來說我們最好避免使用any
類型。
確定類型
下面是一個如何確定表form
元素上的onSubmit
事件類型的例子。
function App() { // ??? event written inline return ( <div> <form onSubmit={e => console.log(e)}></form> </div> ); } export default App;
我們將鼠標懸浮在內聯的e
參數上,發現提交事件應該類型聲明為React.FormEvent<HTMLFormElement>
。
現在我們知道了正確的類型,我們就可以提取事件處理函數。
function App() { const handleSubmit = (event: React.FormEvent<HTMLFormElement>) => { event.preventDefault(); console.log(event.target); }; return ( <div> <form onSubmit={handleSubmit}> <input type="submit" value="Submit" /> </form> </div> ); } export default App;
這種方法適用于所有的事件處理器,一旦你知道了事件的正確類型,你就可以提取你的處理函數并正確地聲明類型。
TypeScript總是能夠推斷出內聯事件處理器的事件類型,因為你已經安裝了React的類型定義文件。
# ??? with NPM npm install --save-dev @types/react @types/react-dom # ---------------------------------------------- # ??? with YARN yarn add @types/react @types/react-dom --dev
原文鏈接:https://juejin.cn/post/7136914937405784071
相關推薦
- 2023-01-05 淺析C++中的重載,隱藏和覆蓋_C 語言
- 2022-04-25 C#使用游標實現補間函數_C#教程
- 2022-10-08 react-redux的基本使用_React
- 2022-09-29 DevExpress的DateEdit設置顯示日期和時間的方法_C#教程
- 2022-09-25 edge或谷歌瀏覽器打開默認是百度或其他,怎么修改成自己想要的頁面
- 2022-07-13 數據結構之冒泡排序
- 2022-12-05 Go?reflect?反射原理示例詳解_Golang
- 2022-07-14 python如何往列表頭部和尾部添加元素_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支