- TypeScript全棧開發
- 趙卓
- 2852字
- 2023-06-29 17:29:43
1.1 TypeScript的發展史
在介紹TypeScript時,始終會提到JavaScript。TypeScript和JavaScript究竟有怎樣的關系?TypeScript究竟有哪些優勢?這里就不得不從JavaScript的興起開始說起。
1.1.1 JavaScript的興起
1990年,歐洲粒子物理實驗室的Tim Berners-Lee制定了超文本傳輸協議(HyperText Transfer Protocol,HTTP)、超文本標記語言(Hyper Text Markup Language,HTML)、統一資源標識符(Uniform Resource Identifier,URI)等技術規范,并制作了第一款Web瀏覽器和服務器,以及第一批網頁。這些網頁原本只在實驗室內部交流使用,但在1991年,首個對外開放的網頁上線,這標志著萬維網正式誕生。1993年,歐洲粒子物理實驗室宣布萬維網對所有人免費開放,萬維網的開始普及。
然而,早期萬維網的網頁只是完全靜態的HTML頁面。1994年,網景公司發布了面向普通用戶的新一代瀏覽器Netscape Navigator 1.0版,其市場份額一度超過90%。雖然這是歷史上首個成熟的瀏覽器,但是只能用來瀏覽靜態HTML頁面,無法與用戶進行即時交互,所有的事情只能交給服務器去處理。
此時網景公司希望引入一種網頁腳本語言,以便動態處理網頁內容。公司高層當時進行了多種嘗試,卻依然沒有找到完全適用的方案。由于當時Java火熱且網景公司正在與Sun公司合作,因此在1995年網景公司做出決策,打算開發一種新的網頁腳本語言,它必須既像Java,又要比Java簡單,以便非專業的網頁作者也能快速上手。
在這樣的情形下,JavaScript應運而生。雖然JavaScript的名稱包含Java,但是其實兩者一點關系都沒有。JavaScript只在名字上蹭了Java的熱度,卻由網景公司和Sun公司聯袂推廣。
當時負責設計JavaScript的Brendan Eich為了快速完成任務,只花了10天時間就設計出了JavaScript。雖然時間過于倉促,但至少達到了設計的初衷。
網景開發了JavaScript并搭載在最新版本的瀏覽器上,當時處于競爭關系的微軟便模仿JavaScript開發了JScript,并于1996年搭載在IE3.0上。在競爭中,網景和微軟各自的腳本語言中都擁有不同的語法和特性,網頁變得難以兼容。
1996年年底,網景公司將JavaScript提交給歐洲計算機制造商協會(European Computer Manufacturers Association,ECMA)并進行標準化。1997年,在ECMA的協調下,由網景、Sun、微軟、Borland組成的工作組確定統一腳本語言標準——ECMA-262。ECMA-262標準定義了ECMAScript語言規范,約定Navigator搭載的JavaScript、IE搭載的JScript、CEnvi搭載的ScriptEase或其他瀏覽器搭載的腳本語言都必須遵循統一的ECMAScript語言規范。
此后,ECMAScript作為統一標準,其語法和特性的每次升級、更新均由ECMA起草與制定,而由各個瀏覽器廠商將這些語法和特性實現到各自的瀏覽器上。
1998年,ECMAScript 2.0版發布。1999年,ECMAScript 3.0版發布,成為JavaScript的通行標準,得到了廣泛支持。
雖然腳本語言已經標準化,但競爭仍在繼續。2000年,網景敗陣下來,Navigator瀏覽器開始衰落,直至銷聲匿跡。此后我們所稱呼的JavaScript只是歷史慣用名稱,不再指原先Navigator瀏覽器中的JavaScript,而是指各個瀏覽器中已經實現的ECMAScript標準。
此后,由于缺少競爭,因此ECMAScript標準在很多年時間里沒有任何更新和升級。JavaScript開始的熱度不高,直到發生以下幾個事件,JavaScript才真正開始興起。
● JavaScript原本只在瀏覽器中實現一些簡單的動態效果。2005年,Ajax誕生,局勢發生了變化。Ajax(Asynchronous Javascript and XML,異步JavaScript和XML)是指一種快速創建交互式、動態網頁應用的開發技術。在無須重新加載整個網頁的情況下,使用Ajax能夠更新部分網頁。從此,瀏覽器中的網頁開始能為用戶提供復雜的交互。jQuery等JavaScript框架的興起使HTML文檔的遍歷、事件處理、動畫等變得更加簡單。
● JavaScript原本只能在瀏覽器端使用,應用面有限,要實現服務器端功能,我們必須換一種語言。2009年,Ryan Dahl基于Chrome的JavaScript來源引擎(V8引擎)開發并發布了Node.js運行環境,使JavaScript能夠在服務器端運行。于是,JavaScript也成為一門服務器端語言,就如PHP、Python、Perl、Ruby 等服務器端語言一樣。從此,JavaScript能夠同時應用于瀏覽器端及服務器端。
● 2013年,基于JavaScript的React開源,它引入了一種顛覆性的方式來處理瀏覽器DOM(Document Object Model,文檔對象模型),具備很強的可維護性,越來越多的人開始使用。隨著React項目越來越火熱,衍生出React Native項目,并于2015年開源,開發人員從此可以使用JavaScript來同時開發iOS和Android的App。
這些事件都促使JavaScript蓬勃發展,ECMAScript標準的發展也隨之推動起來,從ECMAScript 6.0版(ECMAScript 2015)開始,ECMAScript技術委員會TC39決定將ECMAScript標準改為每年都更新一次(今后的版本號為ECMAScript+年份,如ECMAScript 2016、ECMAScript 2017等),以滿足日益增長的技術發展需要。
1.1.2 JavaScript的缺陷
前文已經提到,JavaScript一開始只希望在瀏覽器中增加一些簡單的動態效果,根本沒有打算應用于大型項目,而負責設計JavaScript的Brendan Eich只花了10天時間就把這門語言設計出來了。由于早期設計時間太短,因此語言細節考慮得不夠嚴謹,甚至混亂不堪。
在一些比較小的項目中,這些問題并不明顯。但隨著JavaScript的興起,JavaScript的應用領域越來越廣,越來越多的中大型項目也開始使用JavaScript,JavaScript的缺陷變得越來越明顯,給企業帶來了巨大的維護成本。
其中核心的問題便是JavaScript是一種動態語言。不經歷編譯過程,所有的問題(如變量類型有誤,屬性為空等)都無法在代碼剛完時就發現,只能在運行、調試甚至測試環節才能發現。而最壞的情況就是問題已經存在了很久,卻依舊無人發現。
前幾年,專注于提升研發體驗、提供異常監控解決方案的平臺Rollbar統計了在1000多個JavaScript項目中最常出現的十大錯誤類型,如圖1-1所示。
可以看出,在這些錯誤中,有7類類型錯誤,一類引用錯誤,一類數組越界錯誤。由于這些錯誤無法在事前發現,只能在運行時才能發現,大大增加了項目的維護成本,為企業帶來巨大損失。
除以上問題之外,JavaScript還有很多的設計上的缺陷,這些問題及缺陷都導致JavaScript天然地不適合開發中大型項目。
另外,JavaScript依賴各個瀏覽器廠商、平臺廠商對最新ECMAScript標準的支持,但各個廠商的支持情況參差不齊,在一個瀏覽器或平臺上的可用的JavaScript語法和特性在另一個瀏覽器或平臺可能就無法使用。

圖1-1 1000多個JavaScript項目中最常出現的十大錯誤類型
業界急需一種新的語言,它既能解決JavaScript的核心問題,又能兼容現在的ECMAScript標準,還能在各個支持ECMAScript標準的瀏覽器、平臺上使用全部的語法和特性。在這種背景下,TypeScript誕生了。
1.1.3 TypeScript的誕生
2012年,由“Delphi和.NET之父”Anders Hejlsberg設計的開源和跨平臺語言——TypeScript誕生了。TypeScript專為中大型項目設計,它是JavaScript類型的超集。TypeScript與JavaScript的關系如圖1-2所示,TypeScript在JavaScript的基礎上添加了靜態類型定義和基于類的面向對象編程等特性,徹底彌補了JavaScript的設計缺陷。

圖1-2 TypeScript與JavaScript的關系
前面已經提到JavaScript是一門動態語言,不經過編譯,所有的問題都無法在代碼剛寫下時就發現,由此會引發各種錯誤,這是它的核心問題。而使用TypeScript能從根本上杜絕這類問題。對于前面提到的JavaScript項目中最常出現的十大錯誤類型,如果換作TypeScript,通過靜態類型檢查,90%的問題在代碼剛寫下時就可以發現,根本無須等到運行環節。
這不僅大幅降低了維護成本,而且大幅提高了開發效率。TypeScript需要編寫類型定義代碼,因此提高了代碼的可讀性,它還可以在集成開發環境(Integrated Development Environment,IDE)下進行智能提示,并能隨時通知可能產生的Bug。
另外,JavaScript不利于組織中大型項目的代碼,而TypeScript中加入了面向對象編程的設計,可以使用命名空間、接口、類、裝飾器等語法和特性,使代碼更易于組織。
TypeScript支持最新的ECMAScript標準,其代碼通過TypeScript編譯器或Babel可以轉譯為JavaScript代碼,可以在任何支持JavaScript的瀏覽器和平臺中運行。在編譯時,我們可以選擇ECMAScript標準的版本,即使在尚未支持最新ECMAScript標準的瀏覽器和平臺上也可以運行所有的TypeScript語法和特性。
TypeScript具備的優秀特性使它漸漸演變為中大型項目的“剛需”,而且越來越多的JavaScript框架可以使用TypeScript進行重構。TypeScript不僅能滿足項目開發的需要,而且對個人職業生涯的發展至關重要。
- INSTANT Mock Testing with PowerMock
- 流量的秘密:Google Analytics網站分析與優化技巧(第2版)
- C語言程序設計實踐教程(第2版)
- 羅克韋爾ControlLogix系統應用技術
- Backbone.js Blueprints
- 精通Python自然語言處理
- EPLAN實戰設計
- JavaScript 程序設計案例教程
- Elasticsearch Server(Third Edition)
- Building Microservices with .NET Core
- Access 2010數據庫應用技術實驗指導與習題選解(第2版)
- 網絡數據采集技術:Java網絡爬蟲實戰
- MyBatis 3源碼深度解析
- 超簡單:Photoshop+JavaScript+Python智能修圖與圖像自動化處理
- 深入分析GCC