TypeScript是一個開源的、跨平颱且帶有類型係統的JavaScript超集,它可以編譯為純JavaScript,然後運行在任意的瀏覽器和其他環境中。它使開發者可以使用一些未來JavaScript標準(ECMAScript 6和7)中的特性。TypeScript為JavaScript添加瞭可選的靜態類型、類和模塊,讓大型JavaScript應用可以使用更好的工具並擁有更清晰的結構。
本書通過大量示例,一步一步讓讀者由淺至深地瞭解TypeScript。首先介紹瞭TypeScript的基本概念,接著介紹瞭像Gulp這樣的自動化工具,以及對函數、泛型、迴調和promise的詳細解釋。還介紹瞭TypeScript中的麵嚮對象特性和內存管理能力。最後,帶領讀者使用本書講解的概念編寫瞭一個單頁麵應用。
你將從本書學到:
√ 學習TypeScript語言的關鍵特性和運行時
√ 開發模塊化、可伸縮、可維護以及可適配的Web應用
√ 編寫符閤SOLID原則的麵嚮對象的代碼
√ 使用像Gulp和Karma這樣的自動化工具來節省時間
√ 使用Mocha、Chai和SinonJS這樣的測試工具來開發健壯的應用
√ 通過實踐從零開發一個單頁麵應用框架,以鞏固你的TypeScript知識
√ 通過TypeScript來使用未來JavaScript標準(ES6和ES7)中的特性
本書首先介紹瞭TypeScript 的基本語法和基本的自動化工作流配置方法,然後從麵嚮對象入手,著重介紹瞭麵嚮對象的概念和它的一些*佳實踐,並結閤例子講解瞭如何基於TypeScript 的類型係統應用這些*佳實踐。隨後剖析瞭TypeScript 在編譯後的運行時行為,並從性能與測試的角度講解瞭如何編寫健壯的TypeScript 代碼,所以書中還包括瞭性能分析與測試相關的內容。*後介紹瞭如何使用TypeScript 結閤麵嚮對象、MVC 等概念,結閤本書前麵提到的自動化的工作流、麵嚮對象*佳實踐、性能優化和測試等內容實現一個單頁應用(SPA)框架,並用這個框架構建瞭一個單頁應用。
Remo H. Jansen 是一位前端工程師、開源項目貢獻者、企業傢、科技愛好者、遊戲愛好者和互聯網愛好者。
他來自西班牙的塞維利亞,但目前居住於愛爾蘭的都柏林,並在那裏做著一份金融服務行業的全職工作。Remo 有著多年的大型JavaScript 應用開發經驗,從航班預定係統到投資組閤管理解決方案。
Remo 在TypeScript 社區中十分活躍。他是都柏林TypeScript 交流會的組織者,並且是InversifyJS(一個TypeScript 應用的控製反轉容器)和AtSpy(一個TypeScript 應用的測試框架)的作者。在他的個人博客(http://blog.wolksoftware.com/)中,他寫瞭許多關於TypeScript 和其他Web 技術的博客。
Remo 也是由Packt Publishing 齣版,Nathan Rozentals 撰寫的Mastering TypeScript 一書的技術審校者。
前言 .................................... XVIII
1 TypeScript簡介 .................. 1
TypeScript的架構 ........................... 1
設計目標 ................................. 1
TypeScript組件 ...................... 3
TypeScript語言特性 ....................... 4
類型 ......................................... 6
變量、基本類型和運算符 ..... 7
流程控製語句 ....................... 14
函數 ....................................... 18
類 ........................................... 20
接口 ....................................... 22
命名空間 ............................... 22
綜閤運用 ....................................... 23
小結 ... 25
2 自動化工作流程 ................ 26
一個現代化的開發工作流程 ....... 26
準備工作 ....................................... 27
Node.js ................................... 27
Atom ...................................... 27
Git和 GitHub ........................ 30
版本控製工具 ............................... 30
包管理工具 ................................... 34
npm ........................................ 35
Bower..................................... 38
tsd .......................................... 38
自動化任務工具 ........................... 39
檢查 TypeScript代碼的質量 41
編譯 TypeScript代碼 ............ 42
優化 TypeScript應用 ............ 44
管理 Gulp任務的執行順序 . 48
自動化測試工具 ........................... 50
使跨設備測試同步 ....................... 52
持續集成工具 ............................... 55
腳手架工具 ................................... 56
小結 ... 58
3 使用函數 .......................... 59
在 TypeScript中使用函數 ............ 60
函數聲明和函數錶達式 ....... 60
函數類型 ............................... 61
有可選參數的函數 ............... 62
有默認參數的函數 ............... 63
有剩餘參數的函數 ............... 64
函數重載 ............................... 66
特定重載簽名 ....................... 67
函數作用域 ........................... 68
立即調用函數 ....................... 71
範型 ....................................... 74
tag函數和標簽模闆 ............. 77
TypeScript中的異步編程 ............. 78
迴調和高階函數 ................... 79
箭頭函數 ............................... 79
迴調地獄 ............................... 81
promise .................................. 86
生成器 ................................... 91
異步函數――async和 await 93
小結 ... 93
4 TypeScript中的麵嚮對象編程 ...................................... 94
SOLID 原則 ................................. 95
類 ....... 95
接口 ... 99
關聯、聚閤和組閤 ..................... 100
關聯 ..................................... 100
聚閤 ..................................... 100
組閤 ..................................... 100
繼承 . 101
混閤 ..................................... 104
範型類 ......................................... 109
範型約束 ..................................... 113
在範型約束中使用多重類型 ......................................... 117
範型中的 new操作 ........... 118
遵循 SOLID原則 ....................... 118
裏氏替換原則 ..................... 118
接口隔離原則 ..................... 120
依賴反轉原則 ..................... 122
命名空間 ..................................... 122
模塊 . 124
ES6模塊――運行時與程序設計時 .............................. 126
外部模塊語法――僅在程序設計階段可用 .................. 127
AMD 模塊定義語法――僅在運行時使用 .................. 128
CommonJS 模塊定義語法――僅在運行時使用 ......... 129
UMD模塊定義語法――僅在運行時使用 ................... 130
SystemJS模塊定義 ――僅在運行時使用 ..................... 131
循環依賴 ..................................... 131
小結 . 133
5 運行時 .............................134
環境 . 135
運行時的一些概念 ..................... 135
幀 ......................................... 136
棧 ......................................... 137
隊列 ..................................... 137
堆 ......................................... 137
事件循環 ............................. 137
this操作符 .................................. 138
全局上下文中的 this操作符 .......................................... 139
函數上下文中的 this操作符 .......................................... 139
call、apply和 bind方法 ..... 140
原型 . 143
實例屬性與類屬性的對比 . 144
基於原型的繼承 ................. 147
原型鏈 ................................. 151
訪問對象的原型 ................. 152
new操作符 .......................... 153
閉包 . 153
閉包和靜態變量 ................. 155
閉包和私有成員 ................. 157
小結 . 159
6 應用性能 .........................160
準備工作 ..................................... 160
性能和資源 ................................. 161
性能指標 ..................................... 162
可用性 ................................. 162
響應時間 ............................. 162
處理速度 ............................. 162
延遲 ..................................... 162
帶寬 ..................................... 163
可伸縮性 ............................. 163
性能分析 ..................................... 163
網絡性能分析 ..................... 163
網絡性能與用戶體驗 ......... 168
GPU性能分析 .................... 172
CPU性能分析 .................... 174
內存性能分析 ..................... 176
垃圾迴收器 ......................... 178
性能自動化 ................................. 178
性能優化自動化 ................. 178
性能監測自動化 ................. 179
性能測試自動化 ................. 180
錯誤處理 ..................................... 180
Error類 ................................ 181
try…catch 語句和 throw 語句 ..................................... 182
小結 . 182
7 應用測試 .........................183
軟件測試術語錶 ......................... 183
斷言 ..................................... 184
測試規範 ............................. 185
測試用例 ............................. 185
測試套件 ............................. 185
測試監視 ............................. 185
替身 ..................................... 185
測試樁 ................................. 185
模擬 ..................................... 185
測試覆蓋率 ......................... 186
必要的準備 ................................. 186
Gulp ..................................... 187
Karma .................................. 187
Istanbul ................................ 187
Mocha .................................. 187
Chai ...................................... 188
Sinon.JS ............................... 188
類型定義 ............................. 188
PhantomJS ........................... 189
Selenium和 Nightwatch.js 189
測試計劃和方法 ......................... 190
測試驅動開發 ..................... 190
行為驅動測試 ..................... 191
測試計劃和測試類型 ......... 191
建立測試基礎結構 ..................... 192
使用 Gulp構建這個程序 ... 193
使用 Karma運行單元測試 197
使用 Selenium和 Nightwatch.js運行 E2E測試 ........... 200
使用 Mocha和 Chai創建測試斷言、規範和套件 ............... 203
測試異步代碼 ..................... 207
斷言異常 ............................. 208
Mocha和 Chai的 TDD與 BDD對比 ........................... 209
使用 Sinon.JS編寫測試監視和測試樁 ................................. 209
測試監視 ............................. 213
測試樁 ................................. 215
使用 Nightwatch.js創建端對端測試 ..................................... 216
生成測試覆蓋率報告 ................. 217
小結 . 220
8 裝飾器 .............................221
條件準備 ..................................... 221
注解和裝飾器 ............................. 222
類裝飾器 ............................. 223
方法裝飾器 ......................... 226
屬性裝飾器 ......................... 228
參數裝飾器 ......................... 230
裝飾器工廠 ......................... 232
帶有參數的裝飾器 ............. 234
反射元數據 API ................. 235
小結 . 239
9 應用架構 .........................240
單頁應用架構 ............................. 241
MV* 架構 ................................... 246
MV* 框架中的組件和功能 ....... 247
model ................................... 247
collection ............................. 248
item view ............................. 248
collection view..................... 249
controller .............................. 250
事件 ..................................... 251
路由和 hash (#) 導航 ........ 251
中介器 ................................. 254
調度器 ................................. 255
客戶端渲染和 Virtual DOM .......................................... 256
用戶界麵數據綁定 ............. 256
數據流 ................................. 258
Web component 和 shadow DOM ................................. 259
選擇一個程序框架 ..................... 260
從零開始實現一個 MVC框架 .. 261
準備工作 ............................. 262
程序事件 ............................. 264
中介器 ................................. 265
程序組件 ............................. 268
路由錶 ................................. 270
事件發射 ............................. 271
路由 ..................................... 272
調度器 ................................. 275
controller .............................. 279
model和 model settings ...... 280
view和 view settings........... 283
框架 ..................................... 287
小結 . 288
10 匯總 ...............................289
準備工作 ..................................... 289
程序依賴 ..................................... 290
程序中的數據 ............................. 291
程序架構 ..................................... 292
程序文件結構 ............................. 293
配置自動構建流程 ..................... 294
程序布局 ..................................... 297
實現根組件 ................................. 298
實現 market controller ................. 299
實現 NASDAQ model ................. 302
實現 NYSE model ....................... 303
實現 market view ........................ 304
實現 market模闆 ........................ 306
實現 symbol controller................ 308
實現 quote model ................ 309
實現 symbol view ........................ 311
實現 chart model ......................... 313
實現 chart view ........................... 316
測試應用 ..................................... 318
準備發布程序 ............................. 319
小結 . 320
譯者序
在 JavaScript社區的荒蠻時代裏,構建大型 Web應用是一件吃力且煩瑣的事情。但迫於業務發展的需要,業界一直在探索如何像成熟的工業化的語言那樣開發和構建大型的應用。
微軟在 2009 年發布瞭 TypeScript的第一個版本,它為 JavaScript 帶來瞭類型係統與模塊係統(現在已經廢棄並鼓勵使用 ES6模塊)。而自從 TypeScript問世,JavaScript 社區就沒有停止過對它的議論,有人認為類型係統給 JavaScript 帶來的靜態檢查能力更有利於構建大型應用,而另一些人則認為類型係統會使 JavaScript 喪失其先天的靈活性和動態性,不利於提高開發效率。還有一些人擔心 TypeScript為 JavaScript 帶來瞭太多非標準的特性,很難保證 TypeScript在未來與 JavaScript在語言層麵上保持高度統一。
譯者在翻譯本書前,剛剛經曆瞭將一個 CoffeeScript應用全麵使用 TypeScript重構。 CoffeeScript 從某種程度上來看完全是 TypeScript的對立麵,它甚至比 JavaScript 更具動態性與靈活性。而在譯者重構的這個項目中,代碼量高達上萬行,且包含數十個模塊,之所以選擇使用 TypeScript重構它,是因為日益增長的代碼量與模塊數使得團隊協同開發的難度越來越大。
也正是因為這次重構,使譯者能深入瞭解 TypeScript。它的類型係統異常強大,可以大大降低團隊中成員的溝通成本。以往,團隊中的成員需要調用另一個成員寫的模塊時,必須要仔細研究這個模塊中各個 API 的參數、參數類型和返迴值。然而因為項目中通常缺乏文檔與注釋(這是另外的討論點),所以通常在使用其他人開發的模塊時會占用程序員大量的時間去閱讀和理解其他人的代碼。而 TypeScript的類型係統無疑是給瞭我們一個快捷的文檔,使得我們能更好更快地使用彆人的模塊。即使是在擁有良好的注釋以及文檔的模塊中,TypeScript服務提供的 Intellisense 功能也能讓開發人員如虎添翼,再也不用擔心忘記參數類型或忘記方法名。
而另一方麵, TypeScript過強的約束也在開發時給我們帶來瞭很多額外的睏擾。比如在開啓瞭--noImplicitReturns參數後,一些設計成無返迴值的代碼將會導緻編譯失敗,比如:
getOne(_id: string): string {
const result = cacheService.exist(_id)
if (result) {
return cacheService.findById(_id)
}
}
由於這段代碼隻有一個分支有返迴值,所以它將導緻編譯失敗,但我們正是期待代碼這樣運行。
同時,我們也接觸到瞭一些 TypeScript 的私有功能,比如 enum(枚舉)與 reflectMetaData(元數據反射)。齣於對使用非標準特性的風險的考量,我們並沒有在項目中使用這些特性。
除瞭強大的類型係統帶來的可靠的靜態檢查以外,我們還驚喜地發現瞭一個能大大增加項目可維護性與健壯性的實踐,那就是依靠 TypeScript的類與接口將麵嚮對象的 SOLID原則應用到項目中,這無疑是搭瞭類似 Java 與 C# 等麵嚮對象語言的順風車,它能讓我們更容易地寫齣高內聚低耦閤的代碼。
所以在麵對社區各種對 TypeScript褒貶不一的評價時,希望讀者能理性地看待這些聲音,並且能夠在深思熟慮之後進一步接觸 TypeScript,深入瞭解它的優點與缺點,最終為自己的項目選擇閤適的工具。
關於作者
Remo H. Jansen是一位前端工程師、開源項目貢獻者、企業傢、科技愛好者、遊戲愛好者和互聯網愛好者。
他來自西班牙的塞維利亞,但目前居住於愛爾蘭的都柏林,並在那裏做著一份金融服務行業的全職工作。Remo有著多年的大型 JavaScript應用開發經驗,從航班預定係統到投資組閤管理解決方案。
Remo在 TypeScript社區中十分活躍。他是都柏林 TypeScript交流會的組織者,並且是 InversifyJS(一個 TypeScript應用的控製反轉容器)和 AtSpy(一個 TypeScript應用的測試框架)的作者。在他的個人博客(http://blog.wolksoftware.com/)中,他寫瞭許多關於 TypeScript和其他 Web技術的博客。
Remo也是由 Packt Publishing齣版,Nathan Rozentals撰寫的 Mastering TypeScript一書的技術審校者。
若想要與他取得聯係,可以訪問 http://www.remojansen.com/。
緻謝
這是我齣版的第一本書。在此之前,我經曆瞭相當漫長的學習之路,並且從許多值得感謝的人那裏,學到瞭許多知識。我首先要感謝地處特裏亞納聖彼得慈幼會(位於西班牙的塞維利亞)的計算機科學學
院中的老師們,因為他們讓我體會到瞭教育的價值。感謝 Packt Publishing團隊的成員們的支持和努力工作,與你們的閤作十分愉快。感謝本書的所有技術審校者,他們無價的反饋和努力工作顯著地提升瞭本書內容的質
量。感謝我的同事和室友,Sergio Pacheco Jimenez 和 Adolfo Blanco Diez,因為我常在半夜與前者進行漫長的技術交流,後者為我提供瞭大量咖啡飲料的支持。感謝我的女朋友,Lorraine,我為你無條件的支持和耐心深感榮幸。你就是世界上最好的女朋友,並且還在不斷變得更好。
最後,感謝我的傢人,感謝你們相信我,為我提供指導,成為我最好的傾聽者,支持我的工作,原諒我所犯的錯誤,以及其他一切你們教會我的東西。感謝我們在一起所經曆的開心與傷心的時光。能夠成為你們的孫子、兒子和兄弟,讓我十分驕傲。
關於審校者
Liviu Ignat是一位全棧工程師、架構師、科技極客和企業傢,從 2004年以來開始編寫商業軟件。一開始使用的是 VB6,接著開始使用 .NET和 Java,後來轉嚮瞭 Web前端開發。他對函數式語言十分感興趣,如 F#、Scala、Swift、JavaScript等。在他的一些最新的服務端 Node.js項目和大多數使用流行前端框架的項目中已經使用上瞭 TypeScript。
目前,他正緻力於許多項目,大多數項目是 http://giftdoodle.com/中的,他是這個公司的 CTO,這傢公司中大多數 JavaScript項目都使用 TypeScript編寫。在他的工作經曆中,他使用.NET編寫過分布式後端服務,也編寫過復雜的單頁 Web應用。最近他正緻力於使用 Node.js和 Docker編寫微服務,編寫單頁 Web應用,以編寫 Android和 iOS原生應用。
當 Liviu不寫代碼時,他喜歡在鼕天滑雪,在夏天坐帆船去國外,去世界的其他地方旅行。你可以在 http://www.ignat.email/聯係到 Liviu。
Jakub Jedryszek目前是微軟的一位軟件工程師。在審校本書時,他工作於 Azure Portal,這是世界上使用 TypeScript編寫的最復雜的單頁 Web應用。他也是 .NET開發者的 dotNetConfPL——online會議的共同發起人之一。他的博客是 http://jj09.net/。
Andrew Leith Macrae最初在 Apple 的産品上開始瞭他的編程生涯。多年以來,他使用過 Hypercard、Director、Flash和最近的 Adobe AIR for mobile 開發交互式應用。並且在開發過程中,他也會用到 HTML。他目前是多倫多 Rogers Communications 公司的高級前端工程師,正在使用 AngularJS和 SASS進行敏捷開發。
他堅信 TypeScript是 JavaScript 的未來,TypeScript帶來瞭強類型麵嚮對象語言中的結構化和規則,為開發大規模 Web應用的代碼編寫提供瞭語義上的便利。
你可以在 http://adventmedia.net/聯係到 Andrew。
Brandon Mills的編程生涯已經有十多年瞭,他就職過隻有兩個人的初創公司,也在微軟就職過。他在微軟參與瞭 Visual Studio 2013、Azure Tools 和預裝於 Windows 10的 Edge瀏覽器項目。他也是 ESLint 項目的核心開發團隊成員之一,這是一個開源可配置的 JavaScript和 JSX的語法檢查工具。他目前在 Node.js平颱上使用 JavaScript或 TypeScript編寫應用和服務。他的 GitHub是 https://github.com/btmills。
感謝 Scott 的激勵和給予我的靈感,感謝 Linda給予我無條件的愛,感謝 Abby給予我的耐心,以及感謝 Ashlynn 對我的支持。
Ivo Gabe de Wolff是一位 ivogabe(創始於 2012年)名下的自由職業開發者,他正在烏得勒支大學學習數學和計算機科學。當他隻有 11歲時,便開始使用 Game Maker編寫遊戲程序。在學瞭諸如 C# 和 JavaScript等諸多編程語言後,他在現在的大多數項目中使用 TypeScript。在過去的幾年裏,他在許多不同的環境中使用過 TypeScript,如移動端應用。目前他主要緻力於 Node.js 程序的開發。
另外,他也是許多開源項目的作者,包括 gulp-typescript。你可以在 https:// github.com/ivogabe中找到他的項目。如果你想閱讀更多有關 TypeScript、JavaScr
專業必備正版脈絡清晰幫助很大理論基礎實例經典查閱方便很實用
評分技術達人推薦
評分不錯
評分有點過時瞭!不值得買吧!!!
評分不如看官網。對於語言基礎的東西感覺沒怎麼講,倒是講瞭許多oop的好的實踐
評分給同事買的 希望對他有幫助
評分aaa
評分已經收到,傢人買的,如果能趕上優惠就好瞭
評分公司采購,很好!!!!
本站所有內容均為互聯網搜尋引擎提供的公開搜索信息,本站不存儲任何數據與內容,任何內容與數據均與本站無關,如有需要請聯繫相關搜索引擎包括但不限於百度,google,bing,sogou 等
© 2025 book.qciss.net All Rights Reserved. 圖書大百科 版權所有