為什麼說Typescript是必學語言以及如何學會TS全棧開發

pincman1988發表於2022-07-11

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

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功能,也是幾行程式碼就能輕鬆實現。作為成果,我開發了一個比較完善的開源後臺管理皮膚荼蘼(目前正在升級成React 18)

學習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的優勢

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

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章