還不知道typescript
是啥的前端童鞋須要作下功課了。javascript
接觸typescript
挺早的。13年末的時候,公司的牛人在團隊內推廣typescript
,沒多久咱們就把typescript
作的項目搞上了生產環境。玩新東西的初期都是很爽的,但沒多久就變成了災難。團隊人員更替,培訓/學習成本增長;開發工具不統一,效率極其低下;ts
帶來的利好被消耗的一乾二淨,只有無盡的坑。種種不順,最後不得不把全部ts
文件刪除。html
這是一次很差的經歷,後面我很長一段時間都沒再寫過typescript
了。可是,15年發生了兩件事,讓typescript
再次回到個人視線。前端
一是es6
規範的落地,二是visual studio code
的發佈。這兩條正好解決了上面提到的兩個主要痛點:語言和工具。java
隨着es6
的普及,應該沒幾個前端童鞋會說本身不會點es6
了吧。typescript
最初就是基於es6
的,箭頭函數、模塊、類等等,只不過是在es6
的基礎上加了個強類型(要是會as
就更簡單了)。放到如今的前端環境,typescript
的學習成本已經很低了,比各類前端框架的學習成本都低,能夠放心在團隊內推廣。node
再說開發工具。typescript
剛出的時候只有vs
、vim
、webstorm
支持,除了微軟自家vs
系列,其餘編輯器對ts
的支持僅僅只有語法檢測,智能提示、重命名什麼的那是妄想。
而visual studio
體積太大,輕量級的express
也接近1G了,光這一點就能嚇跑一撥童鞋了。然而,去年4月底,visual studio code
橫空出世,沒有vs
家族的龐大致積,性能又甩出同源的atom
幾條街,對typescript
和javascript
的支持至關給力,簡直就是爲前端童鞋而生的。今年4月中旬,vs code
就會發布1.0
版本,也就下週的事了。要不爲何說ms
大法好?react
除了語言和工具,typescript
的生態也在不斷完善,DefinitelyTyped上有各類主流框架/類庫的頭文件,知足各類各樣的需求;頭文件管理工具tsd(已經廢棄,新的工具叫typings)也作的愈來愈好,ts
項目管理一個json
文件就搞定。webpack
一門語言,有了良好的生態,要火起來那是早晚的事。git
好了,說回正題。es6
第一次看到React.propTypes
的時候,心想這不就是interface
麼,typescript
+react
指日可待啊。果真,typescript
從 v1.6
開始支持jsx
語法。組件的props
和state
均可以定義interface
,類型檢測有了,propTypes
拜拜。github
直接貼代碼:
interface Props { from: string; message: string; } class Greeting extends React.Component<Props,any> { render () { const {from,message} = this.props; return ( <div> <p>來自{from}的消息</p> <p>{message}</p> </div> ) } }
配上vs code
,到哪都有的智能提示簡直不能再爽,貼張gif感覺下。
Greeting
這個組件有兩個prop
,from
和message
,不傳這兩個prop
或者類型搞錯,編輯器都會有提示,state
也是同樣的道理。這tm就是生產力啊!!!
最終編譯出來的文件長這個樣子,再搭配webpack
簡直完美。
前一陣子寫的web版cnode就是用typescript
+react
寫的。
js
不是java
之類的靜態語言,不少錯誤都只能在運行的時候才發現,而typescript
正好彌補了這一點,強類型讓不少錯誤在開發的時候就能被發現。再有人吐槽node
不能搞大型應用,typescript
+node
分分鐘打臉。
除了強類型外,用typescript
還能夠體驗node
暫時不支持的es6
特性,如今有不少童鞋都是直接寫再用babel
編譯,而typescript
生來就具有這一能力,在必定程度上取代了babel
的做用。
v1.7
的typescript
已經支持async/await
,異步流程控制再也不是問題。koa2
發佈了,對應的koa.d.ts
也有人寫好了(感謝DavidCai1993童鞋),如今就是typescript
+node
的最好時機。
直接看圖:
代碼和用js
寫沒什麼兩樣,經過頭文件,能夠很清楚地知道變量類型、函數返回值等信息,不用查api
,不怕會寫錯。
那隻剩調試的問題了,typescript
和babel
同樣,均可以經過sourcemap
來調試,作好配置,和調試js
一毛同樣。
以koa2
爲例:
typescript
是好東西,你們快搞起!
typescript
是好東西,你們快搞起!
typescript
是好東西,你們快搞起!