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