感謝邀約,你的這個(gè)問題提的很好,10月5日凌晨,對(duì)于Vue來說是個(gè)重要的日子,尤雨溪公布了 Vue 3 源代碼,這次源代碼最大的亮點(diǎn)就是 98% 以上使用TypeScript 編寫,目前就有一個(gè)很現(xiàn)實(shí)的問題擺在我們前端開發(fā)者的面前源碼,如果你不學(xué)習(xí) TypeScript ,Vue 源代碼你就看的很吃力。
因此,關(guān)于你的提問,我可以肯定的告訴你,作為前端開發(fā)者,我們此時(shí)比以往任何時(shí)候更需要學(xué)習(xí)TypeScript,以下是針對(duì)這個(gè)答案的觀點(diǎn),歡迎大家指正。
首先我們來了解下什么是TypeScript
C#語言的創(chuàng)始人 Anders Hejlsberg 設(shè)計(jì)了 TypeScript,并于2013年6月19日發(fā)布了其第一個(gè)正式版本,它是JavaScript的一個(gè)超集,之所以設(shè)計(jì)這個(gè)語言的初衷就是幫助前端開發(fā)人員能像后端開發(fā)人員那樣利用高級(jí)語言的特性進(jìn)行編寫代碼。比如可以利用高級(jí)語言的這些特點(diǎn):強(qiáng)類型、面向?qū)ο?、語法檢查,代碼編譯等。TypeScript 還有一個(gè)最大的特點(diǎn)就是可編譯 ,編譯的好處就是有利于發(fā)現(xiàn)錯(cuò)誤,一發(fā)現(xiàn)錯(cuò)誤就終止編譯,提前幫我們定位問題,編譯通過后,就會(huì)將 TypeScript 語言轉(zhuǎn)換成高質(zhì)量的原生JavaScript 代碼。
經(jīng)過這幾年的發(fā)展,TypeScript 的最新版本是3.X,目前是微軟最有影響力的產(chǎn)品之一,最重要的一點(diǎn)是現(xiàn)在完全免費(fèi)并且開源。還有一個(gè)比較有趣的事情是,連谷歌這樣競爭對(duì)手,在其 Angular 的前端框架產(chǎn)品上,也放下成見,從2.0 版本就開始擁抱TypeScript,可見谷歌在這件事情多么有先見知名,現(xiàn)在 React 、Vue 才意識(shí)到使用TypeScript。從目前的情況來看,如果你不學(xué)習(xí)TypeScript,Angular 框架你就無法使用,在過不了多久,React 、Vue 也不好說會(huì)不會(huì)強(qiáng)制要求我們使用TypeScript,反正Angular 最早這么干了,目前還是主流的前端框架之一。
然后我們?cè)趤矸治鱿?JavaScript 的現(xiàn)狀
這幾年 JavaScript 可謂發(fā)展迅速,可謂全平臺(tái)通吃,現(xiàn)流行稱作“大前端”,目前前端不僅能做網(wǎng)站、還能做電銷機(jī)器人端、WebGL 3D 動(dòng)畫、VR、后端、游戲開發(fā)、物聯(lián)網(wǎng)開發(fā)、甚至人工智能等等,這些互聯(lián)網(wǎng)產(chǎn)品的主要形態(tài),幾乎都可以用前端來完成。由于其發(fā)展太快,JavaScript 這門語言也在緊跟時(shí)代的步伐,并且改名ECMAScript,幾乎每年都會(huì)有新版本發(fā)布,目前最新版本應(yīng)該到10了,就是這樣的發(fā)展速度,還是與java 和 c# 這些成熟的高級(jí)語言還有很大的距離。由于版本的問題,我們?cè)陧?xiàng)目中可能混雜著各版本的腳本,造成了規(guī)范不統(tǒng)一,兼容性差的各種問題。
接下來,我們來回顧下 JavaScript 的常見的場景,由于其實(shí)弱語言的特點(diǎn),不會(huì)進(jìn)行類型檢查,比如 1+“1” 這個(gè)問題,有可能是我們?nèi)藶槭д`的原因多寫了雙引號(hào),其結(jié)果不會(huì)報(bào)錯(cuò),會(huì)正常輸出一個(gè)我們不想見到的結(jié)果11,這就造成了我們很難發(fā)現(xiàn)問題。除此之外,還有莫名其妙的各種undefined問題,也不會(huì)影響程序運(yùn)行,增加了我排查問題的難度。
因此我們需要一個(gè)工具幫我們降低 JavaScript 弱語言的脆弱性,減少由于不正確類型導(dǎo)致錯(cuò)誤產(chǎn)生的風(fēng)險(xiǎn)和各種版本混雜造成錯(cuò)誤的風(fēng)險(xiǎn)等等。TypeScript 的出現(xiàn)正好解決了我們的這類問題。
接下來具體分析下 TypeScript 的特點(diǎn)和優(yōu)勢
1、入門容易,前端開發(fā)者很容易上手
TypeScript 從表面上看來就和普通的 JavaScript 代碼差不多,無非就是把高級(jí)語言的強(qiáng)類型這個(gè)最主要的特征引入JavaScript,就好像為 JavaScript 上了一把高級(jí)語言強(qiáng)類型的鎖,避免這類問題的產(chǎn)生,由此不得不佩服微軟的良苦用心,就是為了讓我們前端開發(fā)者更好的更快的學(xué)習(xí)TypeScript。我們先來看段代碼,理解下強(qiáng)類型的特征,如下代碼所示:
你可能認(rèn)為這段代碼很平常,如果你這樣調(diào)用 increaseAge(cat),TypeScript 編譯器就會(huì)報(bào)出錯(cuò)誤,提示你increaseAge這個(gè)函數(shù)的參數(shù)必須是數(shù)字。如果是原生 JavaScript 不但不報(bào)錯(cuò),還會(huì)正常的返回結(jié)果,這就大大增加了我們開發(fā)過程中潛在的風(fēng)險(xiǎn)及排查錯(cuò)誤的時(shí)間成本。這也許就是TypeScript 的魅力所在,提前幫我們發(fā)現(xiàn)代碼出現(xiàn)錯(cuò)的風(fēng)險(xiǎn)。
2、按需編譯成我們指定的 JavaScript 版本
在上面分析 JavaScript 的現(xiàn)狀時(shí),我們提及到 JavaScript 版本幾乎每年都會(huì)有新的版本,如果你要寫出兼容性比較高的腳本,對(duì)于我們前端開發(fā)者來說是一個(gè)很大的挑戰(zhàn),你不能保證每個(gè)人都使用let,或者超前使用最新語法特性等。TypeScript 卻很好的解決了此問題,你可以按需輸出你需要的腳本,比如 ECMAScript 3、ECMAScript 5 、ECMAScript 6 。同時(shí) TypeScript 還與時(shí)俱進(jìn),緊跟 JavaScript 的新特性,這就意味你可以使用這些新特性進(jìn)行編寫,無需考慮其是否兼容源碼,兼容的事情都交給 JavaScript 編譯器吧。
3、代碼規(guī)范標(biāo)準(zhǔn),有利于團(tuán)隊(duì)協(xié)作開發(fā)
現(xiàn)在的互聯(lián)網(wǎng)產(chǎn)品越來越復(fù)雜,形態(tài)又多,各終終端,一個(gè)產(chǎn)品不可能只有一個(gè)前端進(jìn)行開發(fā),現(xiàn)在前端開發(fā)也是團(tuán)隊(duì)的開發(fā)模式,剛才提及到 JavaScript 本身的特點(diǎn)還有其發(fā)展太快,這就會(huì)造成每個(gè)人寫代碼的隨意性就會(huì)很大,你當(dāng)然可以為團(tuán)隊(duì)引入 eslint 這些插件進(jìn)行代碼質(zhì)量檢查,但是你要整理出這些規(guī)范來估計(jì)要花費(fèi)不少的時(shí)間。與其花時(shí)間在這上面,還不如在TypeScript 的基礎(chǔ)上,結(jié)合 TypeScript 的特點(diǎn)做一套標(biāo)準(zhǔn)即可來應(yīng)對(duì) JavaScript 版本不斷更新的特點(diǎn)。
最后給前端初學(xué)者的一些建議
如果你是 JavaScript 的新手,我不建議你一上來就學(xué)習(xí) TypeScript,等你有了一定的基礎(chǔ),對(duì)前端的概念和邏輯有一定的認(rèn)知后,再學(xué) TypeScript 也不晚,并且學(xué)習(xí)起來更快 ,這樣你就會(huì)寫出更健壯的 TypeScript。TypeScript 這個(gè)工具的設(shè)計(jì)初衷并不是為了吸引更多的人學(xué)習(xí)前端,而是為了讓具有一定基礎(chǔ)的前端開發(fā)者編能像其他高級(jí)語言開發(fā)者一樣編寫出質(zhì)量更高的健壯性的代碼。
小節(jié)
今天的內(nèi)容就分享到這里,不知道我的這些觀點(diǎn)是否能說服你去學(xué)習(xí) TypeScript 。還有一個(gè)原因我漏掉了,我在這里補(bǔ)充下,你會(huì)發(fā)現(xiàn)目前端崗位的招聘需求里有的公司都明確要求熟練掌握TypeScript啦 ,學(xué)習(xí)TypeScript本身并不難。它像JavaScript一樣編寫和運(yùn)行,只是增加一些新的理念和語法糖,我們學(xué)起來也會(huì)更加順手,加油吧,現(xiàn)在開始學(xué)習(xí) TypeScript 并不晚。
感謝大家閱讀,如果你有什么好的想法歡迎到留言區(qū)分享交流,如果你贊同我的回答,歡迎給個(gè)贊和轉(zhuǎn)發(fā),謝謝支持。