網(wǎng)站首頁 編程語言 正文
引言
原文鏈接:bobbyhadz.com/blog/react-…
作者:Borislav Hadzhiev
正文從這開始~
總覽
當我們不在事件處理函數(shù)中為事件聲明類型時,會產(chǎn)生"Parameter 'event' implicitly has an 'any' type"錯誤。為了解決該錯誤,顯示地為event
參數(shù)聲明類型。
比如說,在input
元素上,將處理change
事件聲明類型為React.ChangeEvent<HTMLInputElement>
。
這里有個示例用來展示錯誤是如何發(fā)生的。
// 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;
示例中的問題在于,我們沒有顯示地為事件處理函數(shù)的event
參數(shù)聲明類型。
設(shè)置類型
為了解決該錯誤,我們必須根據(jù)事件類型為參數(shù)設(shè)置一個類型。
// 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
事件。
你要找出事件的類型,最簡單的方法是將事件處理器內(nèi)聯(lián)編寫,并將鼠標懸浮在函數(shù)的event
參數(shù)上。
// 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;
截圖顯示,當我們將鼠標懸浮在內(nèi)聯(lián)事件處理器的e
變量上時,我們得到了事件的正確類型。
這種方法適用于所有的事件處理器,一旦你知道了事件的正確類型,你就可以提取處理函數(shù)并正確對其類型聲明。
下面是一個例子,說明如何用同樣的方法確定onClick
事件的類型。
// App.tsx function App() { // ?? event is written inline return ( <div> <button onClick={e => console.log(e)}>Click</button> </div> ); } export default App;
我們將鼠標懸浮在內(nèi)聯(lián)的e
參數(shù)上,并發(fā)現(xiàn)其類型是什么?,F(xiàn)在我們能夠?qū)⑹录幚沓绦蛱崛〉揭粋€函數(shù)中。
// 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;
現(xiàn)在事件的類型正確了。我們不會得到"Parameter 'event' implicitly has an 'any' type"錯誤。
逃生艙any
如果你不想正確地為事件聲明類型,你只是想擺脫錯誤,那么可以將事件類型設(shè)置為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
類型可以有效地關(guān)閉類型檢查。因此,我們現(xiàn)在可以在event
上訪問任何屬性。
這樣就解決了錯誤,因為現(xiàn)在事件被顯式地設(shè)置為any
類型,而之前是隱式地設(shè)置為any
類型。
然而,一般來說我們最好避免使用any
類型。
確定類型
下面是一個如何確定表form
元素上的onSubmit
事件類型的例子。
function App() { // ?? event written inline return ( <div> <form onSubmit={e => console.log(e)}></form> </div> ); } export default App;
我們將鼠標懸浮在內(nèi)聯(lián)的e
參數(shù)上,發(fā)現(xiàn)提交事件應(yīng)該類型聲明為React.FormEvent<HTMLFormElement>
。
現(xiàn)在我們知道了正確的類型,我們就可以提取事件處理函數(shù)。
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;
這種方法適用于所有的事件處理器,一旦你知道了事件的正確類型,你就可以提取你的處理函數(shù)并正確地聲明類型。
TypeScript總是能夠推斷出內(nèi)聯(lián)事件處理器的事件類型,因為你已經(jīng)安裝了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
相關(guān)推薦
- 2022-12-24 ReactNative支付密碼輸入框?qū)崿F(xiàn)詳解_React
- 2022-06-09 Nginx流量拷貝ngx_http_mirror_module模塊使用方法詳解_nginx
- 2022-09-23 基于React路由跳轉(zhuǎn)的幾種方式_React
- 2022-05-15 Python?文件與文件對象及文件打開關(guān)閉_python
- 2022-12-10 C++的std::vector<bool>轉(zhuǎn)儲文件問題_C 語言
- 2024-04-05 idea使用docker生成鏡像(打包鏡像,導入鏡像,導出鏡像)
- 2022-07-24 .Net結(jié)構(gòu)型設(shè)計模式之代理模式(Proxy)_基礎(chǔ)應(yīng)用
- 2023-02-09 Python關(guān)鍵字?asynico基本用法_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支