TypeScript真的很麻煩導(dǎo)致不想使用嗎?
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
前言最近,我們部門在開發(fā)一個(gè)組件庫(kù)時(shí),我注意到一些團(tuán)隊(duì)成員對(duì)使用TypeScript表示出了抵觸情緒,他們常常抱怨說:“TypeScript太麻煩了,我們不想用!”起初,我對(duì)此感到困惑:TypeScript真的有那么麻煩嗎?然而,當(dāng)我抽時(shí)間審查隊(duì)伍的代碼時(shí),我終于發(fā)現(xiàn)了問題所在。在這篇文章中,我想和大家分享我的一些發(fā)現(xiàn)和解決方案。 一、類型復(fù)用不足在代碼審查過程中,我發(fā)現(xiàn)了大量的重復(fù)類型定義,這顯著降低了代碼的復(fù)用性。 進(jìn)一步交流后,我了解到許多團(tuán)隊(duì)成員并不清楚如何在TypeScript中復(fù)用類型。TypeScript允許我們使用 當(dāng)我詢問他們
復(fù)用
復(fù)用
二、復(fù)用時(shí)只會(huì)新增屬性的定義我還注意到,在類型復(fù)用時(shí),團(tuán)隊(duì)成員往往只是簡(jiǎn)單地為已有類型新增屬性,而忽略了更高效的復(fù)用方式。 例如,有一個(gè)已有的類型
實(shí)際上,我們可以利用TypeScript提供的工具類型
類似地,工具類型
三、未統(tǒng)一使用組件庫(kù)的基礎(chǔ)類型在開發(fā)組件庫(kù)時(shí),我們經(jīng)常面臨相似功能組件屬性命名不一致的問題,這不僅影響了組件庫(kù)的易用性,也降低了其可維護(hù)性。 為了解決這一問題,定義一套統(tǒng)一的基礎(chǔ)類型至關(guān)重要。這套基礎(chǔ)類型為組件庫(kù)的開發(fā)提供了堅(jiān)實(shí)的基礎(chǔ),確保了所有組件在命名上的一致性。 以表單控件為例,我們可以定義如下基礎(chǔ)類型:
基于這些基礎(chǔ)類型,定義具體組件的屬性類型變得簡(jiǎn)單而直接:
通過使用 四、處理含有不同類型元素的數(shù)組在審查自定義Hook時(shí),我發(fā)現(xiàn)團(tuán)隊(duì)成員傾向于返回對(duì)象,即使Hook只返回兩個(gè)值。 雖然這樣做并非錯(cuò)誤,但它違背了自定義Hook的一個(gè)常見規(guī)范:當(dāng)Hook返回兩個(gè)值時(shí),應(yīng)使用數(shù)組返回。 團(tuán)隊(duì)成員解釋說,他們不知道如何定義含有不同類型元素的數(shù)組,通常會(huì)選擇使用 實(shí)際上,元組是處理這種情況的理想選擇。通過元組,我們可以在一個(gè)數(shù)組中包含不同類型的元素,同時(shí)保持每個(gè)元素類型的明確性。
在這個(gè)例子中, 五、處理參數(shù)數(shù)量和類型不固定的函數(shù)審查團(tuán)隊(duì)成員封裝的函數(shù)時(shí),我發(fā)現(xiàn)當(dāng)函數(shù)的參數(shù)數(shù)量不固定、類型不同或返回值類型不同時(shí),他們傾向于使用 他們解釋說,他們只知道如何定義參數(shù)數(shù)量固定、類型相同的函數(shù),對(duì)于復(fù)雜情況則不知所措,而且不愿意將函數(shù)拆分為多個(gè)函數(shù)。 這正是函數(shù)重載發(fā)揮作用的場(chǎng)景。通過函數(shù)重載,我們可以在同一函數(shù)名下定義多個(gè)函數(shù)實(shí)現(xiàn),根據(jù)不同的參數(shù)類型、數(shù)量或返回類型進(jìn)行區(qū)分。
在這個(gè)例子中,我們?yōu)?code style="margin: 0px 2px;padding: 2px 4px;outline: 0px;max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;border-radius: 4px;background-color: rgba(27, 31, 35, 0.05);font-family: 'Operator Mono', Consolas, Monaco, Menlo, monospace;color: rgb(239, 112, 96)">greet函數(shù)提供了兩種調(diào)用方式,使得函數(shù)使用更加靈活,同時(shí)保持類型安全。 對(duì)于箭頭函數(shù),雖然它們不直接支持函數(shù)重載,但我們可以通過定義函數(shù)簽名的方式來實(shí)現(xiàn)類似的效果。
這種方法利用了類型系統(tǒng)來提供編譯時(shí)的類型檢查,模擬了函數(shù)重載的效果。 六、組件屬性定義:使用type還是interface?在審查代碼時(shí),我發(fā)現(xiàn)團(tuán)隊(duì)成員在定義組件屬性時(shí)既使用 詢問原因時(shí),他們表示兩者都可以用于定義組件屬性,沒有明顯區(qū)別。 由于同名接口會(huì)自動(dòng)合并,而同名類型別名會(huì)沖突,我推薦使用
結(jié)語TypeScript的使用并不困難,關(guān)鍵在于理解和應(yīng)用其提供的強(qiáng)大功能。如果你在使用TypeScript過程中遇到任何問題,不清楚應(yīng)該使用哪種語法或技巧來解決,歡迎在評(píng)論區(qū)留言。我們一起探討,共同解決TypeScript中遇到的挑戰(zhàn)。 該文章在 2024/3/21 15:43:04 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |