|
TypeScript 目前已經(jīng)迭代到 1.4 版本, 即將到來的 1.5 又搭載了更多好用的特性, 包括與 Angular 團(tuán)隊(duì)合作增加的裝飾器 (Decorators). 很高興的是看到國內(nèi)不少一線前端對 TypeScript 還是抱以比較積極的態(tài)度, 但也有很多同學(xué)提出了一些質(zhì)疑和批評. 我寫這篇文章的目的就是希望能以自己的理解對常見的誤解做一個(gè)說明. TypeScript 是前端工程師的工具很多同學(xué)會認(rèn)為 TypeScript 是為了吸引 (或者只能吸引) 一些掌握了 C#/Java 的后端工程師. 但事實(shí)上, TypeScript 的初衷我想是為了適應(yīng)更大規(guī)模的 Web 應(yīng)用前端開發(fā) (當(dāng)然, 它也可以被用到 NodeJS 上). 經(jīng)常會看到有同學(xué)把 TypeScript 和 CoffeeScript 放在一起比較, 我認(rèn)為是不大恰當(dāng)?shù)? TypeScript 是 JavaScript + 類型系統(tǒng), 而 CoffeeScript 是 Python/Ruby 口味的 JavaScript. 進(jìn)入兩個(gè)項(xiàng)目的官網(wǎng), 很容易就可以從它們宣傳的重點(diǎn)上看出區(qū)別. TypeScript 是為了解決 Scalable 的問題. 而對于 CoffeeScript, 我想很大程度上是因?yàn)樽髡哒J(rèn)為:
但老實(shí)說我挺喜歡 JavaScript 的語法風(fēng)格. TypeScript 是 JavaScript 的工具文章標(biāo)題其實(shí)很明確地表達(dá)了我對 TypeScript 的看法, 它 (確切地說是 TypeScript 的中的 Type) 是 JavaScript 的工具, 不應(yīng)該被作為一門新的語言來對待. 靈活 vs 健壯有同學(xué)說, 就喜歡 JavaScript 弱類型的靈活, 認(rèn)為在 JavaScript 上加上類型會削弱這種靈活性. 我自己雖然不是 JavaScript 入門編程的, 但第一門精通的語言還是 JavaScript, 它也是我最喜歡的語言之一. 我也非常理解這樣的心情: 本來直接 return 一個(gè)對象字面量就可以, 現(xiàn)在非要我去定義一個(gè) interface, 這不是沒事找事么. 確實(shí), 對于一個(gè)規(guī)模不大的項(xiàng)目來說, 直接書寫我們熟悉的 JavaScript 也不容易出錯, 并且更加靈活. 但是, 如果我們將項(xiàng)目規(guī)模擴(kuò)大: 一方面由于 JavaScript 弱類型的性質(zhì), 一些 Lint 能夠檢測到一部分問題 (比如局部變量的命名和使用), 卻在更多的時(shí)候無能為力 (比如對象屬性); 團(tuán)隊(duì)之間的協(xié)作花費(fèi)大量時(shí)間查閱文檔; 如果需要重構(gòu)代碼, 重命名, 都費(fèi)時(shí)費(fèi)力, 還可能留下大量隱患. 這個(gè)時(shí)候再想想 C# 和 Java, 是不是會覺得爽歪歪了. 而且, 針對 JavaScript 的特點(diǎn), TypeScript 有一個(gè)類型 比如:
總之, 靈活是好事, 但是也不必排斥 TypeScript 的類型系統(tǒng), 畢竟確實(shí)在規(guī)模較大的項(xiàng)目上, 它對于代碼健壯性的價(jià)值是顯而易見的. 編程風(fēng)格也有同學(xué)說喜歡 JavaScript 的多范式編程風(fēng)格. 畢竟 JavaScript 也算大半個(gè)函數(shù)式編程語言, TypeScript 會不會削弱了 JavaScript 函數(shù)的地位呢? 當(dāng)然不會. F#/Haskell 也有類型系統(tǒng), 但它們都是不折不扣的函數(shù)式編程語言. 靜態(tài)類型與編程風(fēng)格并不沖突, 不僅如此, TypeScript 還能讓 ES3/5 提早用上 ES6 的箭頭函數(shù) (Arrow Function), 函數(shù)式編程更加暢快了. 未來我想 Angular 2 宣布使用 TypeScript 對于其生態(tài)可謂是非常重要的一筆. 同時(shí)微軟谷歌兩家聯(lián)手, 也為 ES7 中類型的回歸 (ES4 的流產(chǎn)) 埋下了伏筆. JavaScript 之父 Brendan Eich 也在 Twitter 上表示:
現(xiàn)在開始寫 TypeScript 吧! -- 我在 GitHub 上創(chuàng)建了 TypeScript 中文指南, 希望能幫有興趣的同學(xué)快速入門. 目前還在編寫中, 如果大家有什么希望看到的內(nèi)容或者自己的想法歡迎創(chuàng)建 issue. ![]() 掃碼關(guān)注w3ctech微信公眾號 |
|
|