Typescript是必須要學習嗎?如何學習TS全棧開發

Typescript目前在前端,網站,小程序中的位置基本無可替代,同時也可以構建完美的CLI應用。在移動,桌面,後端方面,性能不是要求很高的情況下完全可以勝任,並且在區塊鏈,嵌入式,人工智能方面也開始茁壯成長。

TS的全面性

目前來說前端基本是React,Vue,Angular這三框架占據主流。而現在這三個框架對TS基本是默認支持與推薦的。

接著我們再來說說移動方面。雖然Flutter目前的流行度非常高,但是需要學習Dart語言,這就多瞭一個學習成本,而React Native+TS的流行度依然跟Flutter不相上下,在性能方面對比Flutter有所差距,不過既然使用這種跨平臺開發,那麼基本都是社交,電商等或者展示類的APP,一般不會是系統型或者超大型APP的話,這個方面RN也足夠應付,如果是遊戲或者系統型APP的話,我相信你也不會去選擇Flutter而會直接使用原生瞭。

接著說說桌面應用方面,Electron框架一直在低性能要求的跨平臺桌面應用這塊占據主流,如果你的桌面應用是以web頁面為主或者對性能要求不是非常高的話,Electron足夠應付,如果對性能要求比較高的話,那麼同樣可以使用原生的c#,swift去開發。

在小程序方面毋庸置疑,無論是原生的微信小程序,還是跨平臺的Taro,Uniapp,肯定使用JS/TS來編寫的。在開發網站方面,擁有大量的SSR框架,最為占據主流的就是基於React的Nextjs和基於Vue的Nuxtjs。

而在編寫後端API這部分,Node.js的性能並不比傳統的PHP,Python,Ruby這類動態語言差,尤其在IO和高並發方面因為異步機制和自帶Cluster集群功能,性能表現非常優秀,再加上Nestjs這種企業級的開發框架和越來越完善的生態,完全可以作為和其它動態後端語言平分秋色。

當然與Java,C#尤其是Go這種編譯型的語言還是有一定差距,不過與RN,Electron一樣在性能要求並不是非常高的情況下完全可以應付,而99%的應用或網站是不需要這麼高的性能的。在CLI構建方面,一個Yargs基本可以扛起所有,不用多做解釋。並且目前Node已經在區塊鏈,嵌入式甚至人工智能方面的生態也已經遍地開花,以前區塊鏈基本是go的天下,而嵌入式則是C,Rust這類占據主流,人工智能一般都是用Python。而現在大量的區塊鏈,嵌入式的招聘中開始出現Node.js的身影。就連人工智能也出現支持Node的框架。

TS的必學性

現在來說,Typescript已經成為一門必學的編程語言。

如果你是編程入門者,建議第一門語言就選擇TS,後面打算往職業後端發展可以增加學習一下Go或者Java Spring全傢桶,或者往職業移動開發者方向發展,可以學習一下Swift或者Java,如果長期從事C/S系統開發,則可以嘗試一下C#。

如果你已經對另一種技術棧掌握的比較深入,那麼多學一門TS語言是非常有幫助的。比如說你是職業的Java Spring開發者,那麼學習一下React+TS,瞬間可以成為一名全棧開發者,一個人可以把小程序,前端,APP客戶端,桌面應用等通通搞定

TS目前可以做這些事

  • 使用React等框架可以編寫Spa應用,比如中後臺,數據可視化等
  • 使用Nextjs等框架可以編寫SSR網站
  • 使用Electron可以開發C/S類的桌面應用
  • 使用React Native可以開發跨平臺的移動APP
  • 使用Taro等框架可以編寫跨平臺的小程序
  • 使用Nestjs可以編寫企業級高性能的後端API
  • 使用Yargs可以開發CLI工具
  • 並且目前已經開始在區塊鏈,嵌入式,人工智能方面出現一些高可用的框架

如何學習TS

我個人建議的入門方法是從ES6入手先學習ES6+,這是TS的基石,必須理解瞭這些底層的東西,再學習JS的超集語言TS才會事半功倍。否則如果你會感覺有些東西會很難理解,比如TS的類在底層JS上本身是一個對象,函數也是一個對象,萬物皆為對象。但是你像Java一樣去使用就很不靈活,類其實可以手動使用對象描述構建一個。又比如把裝飾器當成Java註解去理解,那麼代碼又變得很生硬瞭,其實裝飾器本質上隻是一個函數。還有像this,apply等,在ts中沒有直接學習的方案,必須從JS開始

那麼如果一步步把TS全部學會呢?

小編提供一下自己的學習路徑供參考。

學習經歷

首先小編簡單介紹一下自己,我是從08年開始入手的php,前面學過delphi,從08-17年一直用的php,從18年開始轉的TS,在學習TS前,JS方面隻會一些簡單的Jquery。我的學習路徑是這樣的

第一步學習ES6

看的是《阮一峰的ECMAScript6入門》這本電子書。大概瀏覽一遍做到心中有數後,接著學習瞭這本《Typescript入門教程》的電子書。

學習React

接下來就開始學習React,看的是官方文檔,因為當時的官方文檔默認是沒有Ts示例的,所以邊對著《深入理解Typescript》這本電子書查閱,邊寫React。期間學習瞭各種庫,比如Redux,Mobx,React-DND,Antd,React-Spring,Echarts等等,也爬瞭無數的坑,谷歌瞭無數次,看瞭無數次的StackoverFlow的問答和各種庫的Issue,這期間遇到的最老大難的問題就是配置vscode+eslint+prettier+stylelint,光這套學瞭很長一段時間。後來技術慢慢的開始熟練起來,以至於現在拿起React就變成一把利劍一樣好用瞭,比如對於狀態管理,可以直接自己寫或者使用一些輕量級的Zustand等,又比如說React默認沒有的keepalive功能,也是幾行代碼就能輕松實現。

學習Electron

在掌握瞭React後,又開始爬坑Electron,當然也有許許多多的問題,小編花瞭無數的時間和精力去解決,一開始使用的是webpack作為打包工具去編寫桌面應用,後面出來瞭一個極好的構建工具–vite。嘗試瞭使用vite+ts+electron+react的方式去構建,雖然當時的vite還不成熟,坑非常多,也把一個個問題通過自己思索或谷歌去解決瞭,隨著vite的不斷成熟,坑越來越少,這套技術棧也變得堅實,現在使用這套技術棧開發桌面應用已經非常熟練,足可以應付一般的業務需求。

學習Taro和React Native

因為小編傢中一些原因,一段時期一直在自由職業的緣故,所以接到瞭一些各種各樣的單子。有一次客戶要求做一個SEO友好的電商網站,本來小編打算直接用熟練的jquery+laravel搞定,但是後來在各種反復考量下,小編決定采用一些新的技術棧。因為那時候,Remix還沒有出來,甚至同作者的React Router v6也沒發佈,於是小編當時唯一的選擇就是Nextjs(Gatsby太過復雜,因為我不會vue所以直接排除Nuxtjs).然後開始嘗試使用Nextjs去構建這個網站,當然後端因為還沒學習Node,所以依舊使用擅長的PHP去編寫,沒想到竟然全程基本無坑,一氣呵成,可見React的基礎技能對於其生態是有多重要瞭。。。

後面隨著一個新的客戶需要開發一個小程序加APP,這並不在小編的技術棧范圍內,但是給出的報酬和支付訂金的爽快程度前所未見,所以沒辦法,為瞭生活也隻能硬著頭皮上。

一開始去學微信的官方文檔,但是後來客戶說最好能支持某寶,小編沒有精力去學習兩套SDK。這時候我就開始各種搜索跨平臺小程序的開發框架,找到瞭兩個比較成熟的,一個是Uniapp,但是沒有Vue開發經驗再加上不喜歡他官網各種營銷式的文檔樣式和自帶的IDE,那麼隻能選擇另一個京東出的Taro。沒想到使用Taro構建小程序非常順利,除瞭官方的UI醜一點外(現在Taro已經有很多好看的生態庫瞭),基本無坑。這時,看到Taro也支持RN,於是乎抱著試一試的方式,邊學習React Native,邊使用Taro去構建APP,那麼結果大傢都知道瞭,坑是有多多。。。後面隻能裸用React Native去寫APP,坑的確少瞭很多,APP也開發成功瞭,但是唯一的缺憾是UI方面無法和小程序統一瞭。畢竟瑕不掩瑜,希望Taro對RN的支持會越來越好吧,後面有APP開發還是會去嘗試Taro,而不是把它僅用於小程序開發。

學習Nestjs

這幾年,接到的後端業務越來越多,但是因為PHP的口碑撲街(其實個人認為PHP並沒這麼差),很多客戶也是人雲亦雲直接來一句PHP的不要。。。那麼沒辦法,要麼學習Java這個巨無霸體系,要麼入手生態很差的Golang。一次在逛某乎的時候,看到有一名作者在佈道一個node框架–Nestjs。憑我對10來年前,node剛出現時嘗試過的express框架的記憶,想著node不就是slim這種微框架嗎?這些項目得多累。但是鑒於當時也沒有更好的選擇,並且TS語言也熟悉,然後抱著試一試的心態去嘗試Nestjs,沒想到沒試不知道,試瞭就知道撿到寶瞭。這個框架生態非常健全,ORM,消息列隊,websockets,微服務等通通完美支持,然後測試瞭一下性能,對比swoole+symfony/laravel也不遑多讓。立馬拿來構建第一個項目。因為當時的nestjs還是5.0版本,問題頗多,大多集中在Typeorm方面,再加上Nestjs本身一大堆概念,比如DTO,驗證器,攔截器,過濾器等等,在開發第一個CRM項目的時候還是踩瞭非常多的坑,導致項目延期無數次,過瞭半年終於把項目開發好,當然報酬也少瞭許多。。。但是個人認為這一切是值得的,後面就可以使用一種語言打遍天下瞭。

等到第二個項目來臨時,Nestjs已經使用地非常成熟瞭,這時候遇到一個老客戶,他需要一個帶後臺的小程序,這是我發現瞭一個比較好的庫–lerna,可以用一種叫做monorepo的方式,把所有前後端的TS包放在一個倉庫裡,接口能相互調用,還能一鍵發佈一些主應用之外的包到npm的倉庫裡,甚至能按照依賴順序對TS進行編譯,非常實用,所以直接使用lerna構建起瞭整個應用。

學習CLI構建

後面發現瞭更加輕量的pnpm,然後pnpm不支持lerna,但是它本身沒有發佈功能,並且無法按依賴順序執行編譯命令,所以在空餘時間我慢慢的嘗試自己編寫一個命令行工具去使pnpm可以自己按順序執行編譯和一鍵發佈。於是發現瞭一個好用的node的命令行工具–yargs。當然圍繞yargs還發現瞭execa,ora等好用CLI生態庫。並且同時深入整個Node重新學習瞭一遍,比如在使用CLI構建長時間命令式,使用fork開子進程等。同時發覺在開發時nestjs的重啟速度實在太慢,於是在我的工具庫裡添加瞭一個nodemon+swc熱更新nestjs的命令。

後面發現客戶部署上去的Nestjs應用總是在進程出現錯誤後就掛掉,於是乎學習瞭一下cluster,使用PM2+Cluster的方式去部署應用,當然目前基本使用docker來部署瞭。

推薦給大傢

小編以上的學習過程是非常痛苦且漫長的,花瞭大概2年多,因為都是普通人,並非天賦異稟。但是這麼長的學習和爬坑過程,甚至還是全職的情況下,是並不是誰都有時間和精力去做的。尤其有些庫遇到的各種問題去查官網文檔,不僅隻有英文文檔,甚至大量還是語焉不詳的情況下,隻能不停地去查詢stackoverflow以及那些庫的issue,去github的discussions或者discord用英語提交問題。這會浪費大量的學習和工作時間。然後去各種QQ群提問基本就是答非所問,各種灌水,去一些問答社區提問則大概率得不到想要的答案。

所以為瞭幫助大傢能更快的解決開發與工作中遇到的問題。小編開始做一套TS全系列的視頻教程並包含各個技術棧。目前以React18和Nestjs開始制作,慢慢地涵蓋所有TS的技術棧,在學習和開發過程中遇到問題也可以讓小編幫助解決。但是視頻教程隻針對已經有一定基礎的同學來進階學習。

如果沒有任何基礎,可以找小編進行基礎性學習,幫助你盡快地掌握這個TS開發體系。

總結

學會TS全棧開發不僅有助於提升求職競爭力,同時也可以成為一名完全自由的開發者,比起需要長期996的一端開發者來說優勢不可為不大。尤其在某些編程語言和框架非常內卷的情況下,還是非常有幫助的。同時希望我個人能幫助到一些同學快速掌握這套技術棧。

到此這篇關於Typescript是必須要學習嗎?如何學習TS全棧開發的文章就介紹到這瞭,更多相關Typescript學習內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: