今天遇到個小坑,react+Typescript下的定時器也是有很大學問的,遇到問題就及時記錄下來分享一波
一堆報錯:
查證定時器算是什么類型,簡單在瀏覽器控制台打印得知 setInterval 類型定義為 number
改完后還是報錯:有點納悶怎么 setInterval方法 類型是 “Timeout” 而不是 “number”
直接查看類型推導,VSCode很方便的功能
然后跳到聲明文件查看得知 setInterval方法 是屬於NodeJs的方法,類型為 NodeJS.Timeout
后來查證得知react默認使用了global.d.ts的類型推導所以才會用
接下來研究下NodeJS.Timeout是什么東東
http://nodejs.cn/api/timers.html#timers_setimmediate_callback_args
直接去node官網網查到node也定義了同名setInterval方法,所以類型為NodeJS.Timeout
既然直接寫setInterval()是用node的定時器,那么我們只需要 window.setInterval() 這樣子調用就能用瀏覽器自帶定時器
好奇再看看 window.setInterval() 的類型推導,果然是 number
最終代碼樣子: