前端項(xiàng)目到底需不需要 TypeScript ?
點(diǎn)擊關(guān)注公眾號(hào),回復(fù)”抽獎(jiǎng)”
Hello,諸位前端工程師,今天由我來(lái)從一個(gè) CRUD 開發(fā)工程師的角度聊一聊這個(gè) “敏感” 的話題。
有一個(gè)現(xiàn)象
就是你不難發(fā)現(xiàn),大多數(shù)能力比你強(qiáng)的前端工程師,要么在鼓勵(lì)大家用 TS,要么就是自己的開源項(xiàng)目采用了 TS。
而這種現(xiàn)象通常會(huì)在技術(shù)領(lǐng)域會(huì)傳播下來(lái),普及給所有程序員。就像 Vue/React 等框架都有大廠開始大量使用后,再慢慢普及到小廠,最后幾乎所有程序員都被普及到了(畢竟你不會(huì)就找不到工作了)。
而大廠嘗試使用一門技術(shù),并且成功落地之后并沒有拋棄它,而是在更多的項(xiàng)目中使用,這種時(shí)候基本上就可以說(shuō)這門技術(shù)的優(yōu)點(diǎn)是比較明顯的,被普及的概率也就非常大了。
正好,TS 就符合這個(gè)現(xiàn)象和普及規(guī)律。
也就是說(shuō),按照這個(gè)規(guī)律我們其實(shí)可以得出一個(gè)簡(jiǎn)單的結(jié)論:前端項(xiàng)目中使用 TS 是優(yōu)大于弊的,并且以后 TS 會(huì)被普及
有一個(gè)誤區(qū)
這種評(píng)論見多了,起初我真的很想回復(fù)一些什么來(lái)反駁反駁,后來(lái)想一想,其實(shí)就是他們當(dāng)前太菜了...
因?yàn)槲覍?shí)在是想不明白 TS 降低開發(fā)效率是怎么得出來(lái)的?
-
如果你說(shuō)你玩上了類型體操,開發(fā)效率降低了,那我想說(shuō)的是,能力不夠是可以不玩類型體操的,能夠玩上類型體操的也不會(huì)吐出這么低級(jí)的槽,CRUD 也完全不需要類型體操 -
如果你說(shuō)你初始化一個(gè)項(xiàng)目,進(jìn)行各種 TS 配置和導(dǎo)包,出現(xiàn)大量報(bào)錯(cuò)不知所措,那說(shuō)明你還不具備從零搭建一個(gè)TS 項(xiàng)目的能力,本質(zhì)上還是你 TS 以及生態(tài)不熟悉,那你可以選擇去開源社區(qū)找一個(gè)模板,等使用熟悉后再試著自己搭建,不要一開始就磨滅了自己的興致 -
如果你覺得你定義一個(gè) const a = 1,也要寫成const a: number = 1是降低了開發(fā)效率,那其實(shí)是你還不習(xí)慣罷了,畢竟我剛學(xué) TS 的第一天也有這種心理
或者這樣,假設(shè)你們說(shuō)的都是事實(shí),就是 TS 降低了開發(fā)效率。但是 TS 沒有優(yōu)點(diǎn)嗎?TS 的優(yōu)點(diǎn)就沒有一個(gè)能打贏 “降低開發(fā)效率” 這個(gè)假設(shè)嗎?
我覺得應(yīng)該是有的吧,說(shuō)幾個(gè) CRUD 時(shí)就能體會(huì)到的:
-
一個(gè)變量原本是 string 類型,但是在某一處給這個(gè)變量賦值的時(shí)候,賦值成了 number 類型,你開發(fā)時(shí)發(fā)現(xiàn)程序無(wú)論如何都跑不對(duì),定位半天發(fā)現(xiàn)原來(lái)是類型錯(cuò)誤 -
還是這個(gè)變量,你賦值錯(cuò)了,但是由于對(duì)應(yīng)功能不常用,上線前沒有測(cè)試出來(lái),導(dǎo)致出現(xiàn)了嚴(yán)重生產(chǎn)環(huán)境問題,你即將被追責(zé) -
后期維護(hù)時(shí),不用再到處翻找上下文就能立即知道變量類型 -
幾乎不會(huì)再出現(xiàn) ReferenceError:“x” is not defined
就這三個(gè)比較常見的點(diǎn),哪一個(gè)帶來(lái)的問題不能打贏 “降低開發(fā)效率”?就難道 ReferenceError:“x” is not defined 時(shí)你不需要花費(fèi)時(shí)間定位問題嗎?更別說(shuō)出現(xiàn)生成環(huán)境問題了
有需求就有市場(chǎng)
隨意截取了其他 TS 文章下的兩則評(píng)論,類似的不支持 TS 的評(píng)論還有很多,幾乎每一篇相關(guān)文章下面都會(huì)見到。
但是事實(shí)是,從 TS 出現(xiàn),到現(xiàn)在的高熱度和高采用,足以說(shuō)明它在市場(chǎng)上是有足夠多的需求的,并不會(huì)因?yàn)樗^的 “TS 沒有 JS 靈活” 或 “JS 是弱類型,比 TS 更優(yōu)勢(shì)” 等觀點(diǎn)左右它的需求量。
意思就是你必須使用 TS 嗎?
那也當(dāng)然不是,你可以繼續(xù)使用 JS,就像現(xiàn)在你依舊可以使用 JQ。
但...
你真的有不學(xué)習(xí)、不使用 TS 的資本嗎?將好像 JQ 時(shí)代過渡到 Vue/React 時(shí)代的時(shí)候一樣,多少人嚷著 JQ 更優(yōu)秀、市場(chǎng)占有率更高,操作 DOM 多么的靈活,Vue 等框架心智負(fù)擔(dān)多么的大,學(xué) Vue 前必須先學(xué)習(xí) JQ 等等... 現(xiàn)在在看看呢?你還能再招聘 JD 上看見只要求你會(huì) JQ 的崗位嗎?
所以說(shuō)啊,哪怕只是為了你的飯碗,你也應(yīng)該去學(xué)一學(xué) TS、用一用 TS。
不要做低級(jí)程序員
優(yōu)秀的程序員總是在技術(shù)普及之前就研究它的思想,總結(jié)它的優(yōu)缺點(diǎn),嘗試將其落地。
大眾程序員總是在普及的時(shí)候才開始學(xué)。
而最低級(jí)的程序員只有等自己找不到工作了才會(huì)被迫開始學(xué)。
善意的提醒
隨著 Vue3 的普及,開源社區(qū)優(yōu)秀的模板都是擁抱的 TS 的(React 那就更早了),而大多數(shù)公司的項(xiàng)目都是基于這些模板進(jìn)行開發(fā)的。如果不出意外的話,招聘 JD 上會(huì)出現(xiàn)越來(lái)越多的 TS 字樣。
還是那句話,哪怕只是為了自己飯碗。
