本書介紹的是TypeScript,你從書名中其實已經(jīng)知道了這一點。不過,本書不僅介紹TypeScript,還將介紹如何使用TypeScript完成一些比較復(fù)雜的項目。因此,本書介紹的主題比你之前學(xué)習(xí)過的TypeScript相關(guān)主題可能稍微難一些。
所以,我們也許可以把開場白改為這樣:本書介紹的是TypeScript,以及如何用有趣的方式使用TypeScript和一些高級技術(shù)來創(chuàng)建有趣的項目。
必須說明,本書不介紹如何使用Angular、React、Vue或ASP.NET Core進行編程。這些都是龐大的主題,應(yīng)該用整本書的篇幅進行解釋(事實上,在每章末尾,我盡量推薦一些資源,它們能夠幫助你更深入地了解相關(guān)主題)。對于Angular和React,我將每章介紹的新功能的相關(guān)概念限制在5個以內(nèi)。當使用的技術(shù)(如Bootstrap)具有針對其他技術(shù)的具體實現(xiàn)時,我們將使用最合適的庫,例如為React使用reactstrap。之所以如此,是因為這些庫是針對相應(yīng)用戶界面(User Interface,UI)框架設(shè)計的。
在為本書做最初調(diào)查時,有個問題一再浮現(xiàn):現(xiàn)在的熱點技術(shù)是什么?人們在使用什么新的、令人興奮的新技術(shù)?本書旨在介紹一些這樣的技術(shù),包括GraphQL、微服務(wù)和機器學(xué)習(xí)。同樣,本書無法介紹相關(guān)技術(shù)的所有信息。所以,本書只是簡單介紹這些技術(shù),并展示在使用這些技術(shù)進行開發(fā)時,TypeScript的強大功能可以讓開發(fā)工作變得簡單許多。
在閱讀本書的過程中,你會發(fā)現(xiàn)我非常關(guān)注使用面向?qū)ο缶幊蹋∣bject-Oriented Programming,OOP)。我們將構(gòu)建大量的類。這么做有許多原因,但最主要的是前面章節(jié)中編寫的代碼將能夠在后面的章節(jié)中重用。而且,我希望編寫出的代碼能讓你直接添加到自己的代碼庫中。在TypeScript中,基于類的開發(fā)讓實現(xiàn)這些目的變得簡單多了。另外,即使使用了比較高級的技術(shù),這也使我們能夠介紹一些讓代碼變得更加簡單的方法,所以我們討論了一些原則,例如讓類具有單一職責(zé)(稱為單一職責(zé)模式),以及基于模式的開發(fā),即通過對復(fù)雜問題應(yīng)用眾所周知的軟件開發(fā)模式,讓解決方案變得更加簡單。
除了TypeScript,我們還將在大部分章節(jié)中使用Bootstrap設(shè)計UI。在介紹Angular的兩章中,我們則介紹如何使用Angular Material布局界面,因為Material和Angular非常搭配,如果你要開發(fā)商業(yè)Angular應(yīng)用程序,則很有可能會使用Material。
第1章介紹了你以前可能沒有使用過的功能,例如REST屬性和展開,所以我們將比較深入地介紹它們。在后面的章節(jié)中,我們將很自然地使用它們,而不會打斷代碼講解來指出特定的TypeScript功能。另外,在學(xué)習(xí)本書的過程中,你會發(fā)現(xiàn)后面的章節(jié)常常會再次使用前面章節(jié)中的功能,所以我們不是簡單地做一次開發(fā),然后就把那些功能拋之腦后。
【本書面向的讀者】
本書的讀者應(yīng)該至少已經(jīng)熟悉TypeScript的基礎(chǔ)知識。如果你知道如何使用TypeScript編譯器tsc來構(gòu)建配置文件和編譯代碼,也知道TypeScript中的類型安全、函數(shù)和類等基礎(chǔ)知識,那將大有裨益。
即使你對TypeScript有比較深入的了解,本書中也會介紹一些你以前可能沒有使用過的技術(shù),你應(yīng)該會對這些資料感興趣。
【本書內(nèi)容】
第1章介紹你之前可能沒有接觸過的TypeScript功能,例如使用聯(lián)合和交叉類型,創(chuàng)建自己的類型聲明,以及使用裝飾器來啟用面向切面編程等。通過學(xué)習(xí)該章,你將熟悉專業(yè)開發(fā)人員每天都會用到的各種TypeScript技術(shù)。
第2章將編寫第一個實用的項目:一個簡單的markdown編輯器。我們將創(chuàng)建一個簡單的解析器,在Web頁面內(nèi)將其綁定到一個文本塊,用來識別用戶何時輸入一個markdown標簽,并在預(yù)覽區(qū)域反映出效果。在編寫該章的代碼時,我們將介紹如何在TypeScript中使用設(shè)計模式來構(gòu)建更加健壯的解決方案。
第3章將使用流行的React庫構(gòu)建一個聯(lián)系人管理器。在編寫這個應(yīng)用程序時,我們將看到React如何使用特殊的TSX文件來混合TypeScript及HTML,最終生成用戶組件。我們還將看到如何在React中使用綁定和狀態(tài),在用戶改變值時自動更新數(shù)據(jù)模型。這里的最終目的是創(chuàng)建一個UI,允許用戶輸入數(shù)據(jù),并使用瀏覽器自己的IndexedDB數(shù)據(jù)庫來保存和檢索信息,以及了解如何對組件應(yīng)用驗證來確保輸入有效。
第4章介紹MEAN棧,這是我們第一次接觸MEAN。MEAN棧指的是一組相互協(xié)作的技術(shù),用來構(gòu)建能夠在客戶端和服務(wù)器運行的應(yīng)用程序。我們使用MEAN棧來編寫一個相冊應(yīng)用程序,使用Angular創(chuàng)建UI,使用MongoDB存儲用戶上傳的圖片。在創(chuàng)建這個應(yīng)用程序時,我們將使用Angular來創(chuàng)建服務(wù)和組件。同時,我們將看到如何使用Angular Material來創(chuàng)建有吸引力的UI。
第5章告訴我們,并非只能使用REST在客戶端與服務(wù)器之間進行通信,F(xiàn)在很熱門的一個主題是使用GraphQL創(chuàng)建應(yīng)用程序,讓這種應(yīng)用程序使用GraphQL服務(wù)器和客戶端來使用和更新來自多個源的數(shù)據(jù)。該章編寫的Angular應(yīng)用程序?qū)橛脩艄芾硪粋待辦事項列表,并進一步演示Angular的功能,例如使用模板在只讀功能和可編輯功能之間進行切換,另外還將介紹Angular為驗證用戶輸入提供的功能。
第6章進一步探索不依賴REST通信的思想。我們將介紹如何在Angular中創(chuàng)建一個長時間運行的客戶端/服務(wù)器應(yīng)用程序,讓客戶端和服務(wù)器連接,從而能夠在客戶端和服務(wù)器之間來回發(fā)送消息。我們將使用Socket.IO編寫一個聊天室應(yīng)用程序。為了進一步增強代碼,我們將使用一個外部身份驗證提供商來幫助我們專業(yè)地保護應(yīng)用程序,從而避免一些令人尷尬的身份驗證問題,例如用明文存儲密碼。
第7章將說明我們已經(jīng)無法忽視云服務(wù)的發(fā)展。該章將創(chuàng)建的應(yīng)用程序是最后一個Angular應(yīng)用程序,它使用了兩個不同的、基于云的服務(wù)。第一個云服務(wù)是必應(yīng)地圖,我們在這里展示了如何注冊一個第三方的云地圖服務(wù),并把它集成到自己的應(yīng)用程序中。我們將介紹該服務(wù)對不同使用規(guī)模的收費情況。我們將顯示一個地圖來讓用戶保存興趣點,并通過使用Google的Firebase云平臺,把這些數(shù)據(jù)存儲到一個單獨的云數(shù)據(jù)庫中。
第8章利用前面使用React和MEAN棧的經(jīng)驗,介紹如何使用一個等效的基于React的棧。我們第一次接觸MEAN時,使用REST來與一個應(yīng)用程序端點通信。而在該章的應(yīng)用程序中,我們將與多個微服務(wù)通信,創(chuàng)建一個簡化的基于React的CRM系統(tǒng)。我們將討論什么是微服務(wù),什么時候使用微服務(wù),以及如何使用Swagger來設(shè)計REST API及創(chuàng)建其文檔。該章將重點介紹Docker,展示如何在不同的容器中運行不同的服務(wù)。容器是目前在開發(fā)人員中最熱門的主題之一,因為它們能夠簡化推出應(yīng)用程序的過程,并且使用起來不那么困難。
第9章介紹如何使用TensorFlow.js在Web瀏覽器中托管機器學(xué)習(xí)。我們將使用流行的Vue.js框架編寫一個應(yīng)用程序,使用預(yù)訓(xùn)練的圖像模型來識別圖像。之后將介紹如何創(chuàng)建一個姿勢檢測應(yīng)用程序,識別圖像中人的姿勢?梢詳U展這個應(yīng)用程序,使用攝像頭來跟蹤姿勢,從而方便體育教練執(zhí)教。
第10章偏離了之前的主題。前面已經(jīng)編寫了多個應(yīng)用程序,使用TypeScript作為主要編程語言來構(gòu)建UI。該章將使用ASP.NET Core和免費的Discogs音樂API來編寫一個音樂庫應(yīng)用程序,允許用戶輸入藝術(shù)家的姓名并搜索其音樂作品的詳細信息。我們將結(jié)合使用C#和TypeScript來查詢Discogs并構(gòu)建UI。
【如何使用本書】
在閱讀本書前,你應(yīng)該了解TypeScript的基礎(chǔ)知識。對HTML和Web頁面的了解也會很有用。
當下載代碼使用包管理器(如npm)時,你需要知道如何恢復(fù)包,因為我們沒有在代碼存儲庫中包含這些包。要恢復(fù)包,可以在package.json所在的目錄中使用npm install。
在最后一章中,你不需要自己下載缺少的包。當生成項目時,Visual Studio將恢復(fù)這些包。
本書的代碼示例在GitHub上提供,
地址為https://github.com/PacktPublishing/Advanced-TypeScript-3-Programming-Projects。如果代碼有更新,將更新到GitHub存儲庫中。
●第1章 TypeScript的高級特性 1
1.1 技術(shù)需求 2
1.2 使用tsconfig構(gòu)建面向未來的TypeScript 2
1.3 TypeScript高級特性簡介 3
1.3.1 借助聯(lián)合類型使用不同的類型 3
1.3.2 使用交叉類型組合類型 5
1.3.3 使用類型別名簡化類型聲明 7
1.3.4 使用對象展開賦值屬性 8
1.3.5 使用REST屬性解構(gòu)對象 10
1.3.6 使用REST處理可變數(shù)量的參數(shù)11
1.3.7 使用裝飾器進行AOP 13
1.3.8 使用混入(mixin)組成類型 17
1.3.9 使用泛型,將相同的代碼用于不同的類型20
1.3.10 使用映射來映射值24
1.3.11 使用Promise和async/await創(chuàng)建異步代碼25
1.3.12 使用Bootstrap創(chuàng)建UI27
1.4 小結(jié) 30
習(xí)題 31
●第2章 使用TypeScript創(chuàng)建一個markdown編輯器 32
2.1 技術(shù)需求33
2.2 項目概述33
2.3 開始創(chuàng)建一個簡單的HTML項目34
2.4 編寫一個簡單的markdown解析器34
2.4.1 創(chuàng)建Bootstrap UI 35
2.4.2 將markdown標簽類型映射到HTML標簽類型38
2.4.3 使用MarkdownDocument類表示轉(zhuǎn)換后的markdown標記 41
2.4.4 使用訪問者更新markdown文檔 42
2.4.5 通過使用責(zé)任鏈模式?jīng)Q定應(yīng)用哪個標簽 44
2.4.6 綜合運用 48
2.5 小結(jié) 49
延伸閱讀50
●第3章 React Bootstrap聯(lián)系人管理器 51
3.1 技術(shù)需求 51
3.2 項目概述 52
3.3 開始使用組件 52
3.4 創(chuàng)建一個支持TypeScript的React Bootstrap項目 53
3.5 創(chuàng)建模擬布局 53
3.5.1 創(chuàng)建應(yīng)用程序 54
3.5.2 使用tslint設(shè)置代碼的格式 55
3.5.3 添加Bootstrap支持 56
3.6 在React中使用tsx組件 57
3.6.1 React如何使用虛擬DOM來提高響應(yīng)性 57
3.6.2 React應(yīng)用程序的組件 58
3.7 顯示個人信息界面59
3.8 驗證用戶輸入及驗證器的使用 65
3.8.1 驗證地址66
3.8.2 驗證姓名68
3.8.3 驗證電話號碼68
3.9 在React組件中應(yīng)用驗證70
3.10 創(chuàng)建數(shù)據(jù)并把數(shù)據(jù)發(fā)送給IndexedDB數(shù)據(jù)庫71
3.10.1 在狀態(tài)中添加對記錄狀態(tài)的支持 74
3.10.2 從PersonalDetails訪問數(shù)據(jù)庫79
3.11 增強代碼83
3.12 小結(jié)83
習(xí)題84
延伸閱讀84
●第4章 MEAN棧——構(gòu)建一個相冊 85
4.1 技術(shù)需求86
4.2 MEAN棧86
4.3 項目概述87
4.4 準備工作88
4.5 使用MEAN棧創(chuàng)建Angular相冊 88
4.5.1 Angular簡介 88
4.5.2 創(chuàng)建應(yīng)用程序 90
4.5.3 使用Angular Material創(chuàng)建UI 91
4.5.4 使用Material添加導(dǎo)航 92
4.5.5 創(chuàng)建第一個組件——FileUpload組件 94
4.5.6 在應(yīng)用程序中引入對Express的支持100
4.5.7 提供路由支持 102
4.5.8 顯示圖片107
4.5.9 顯示對話框114
4.6 小結(jié) 115
習(xí)題 116
延伸閱讀 116
●第5章 使用GraphQL和Apollo創(chuàng)建Angular待辦事項應(yīng)用程序 117
5.1 技術(shù)需求118
5.2 理解GraphQL與REST的關(guān)系118
5.3 項目概述119
5.4 準備工作120
5.5 使用GraphQL和Angular創(chuàng)建待辦事項應(yīng)用程序120
5.5.1 創(chuàng)建應(yīng)用程序121
5.5.2 創(chuàng)建GraphQL架構(gòu) 126
5.5.3 創(chuàng)建GraphQL解析器 129
5.5.4 使用Apollo Server作為服務(wù)器 133
5.5.5 GraphQL Angular客戶端 135
5.5.6 向頁面組件添加內(nèi)容 139
5.6 小結(jié) 149
習(xí)題 150
延伸閱讀150
●第6章 使用Socket.IO構(gòu)建一個聊天室應(yīng)用程序 151
6.1 技術(shù)需求152
6.2 使用Socket.IO建立客戶端/服務(wù)器之間的長時間通信 152
6.3 項目概述152
6.4 開始使用Socket.IO和Angular 153
6.5 使用Socket.IO、Angular和Auth0創(chuàng)建一個聊天室應(yīng)用程序155
6.5.1 創(chuàng)建應(yīng)用程序 156
6.5.2 為服務(wù)器添加Socket.IO支持 158
6.5.3 創(chuàng)建聊天室客戶端 160
6.5.4 使用Auth0授權(quán)和驗證用戶 162
6.5.5 使用安全路由165
6.5.6 添加客戶端聊天功能166
6.5.7 使用GeneralchatComponent完成我們的應(yīng)用程序170
6.6 小結(jié)172
習(xí)題172
延伸閱讀172
●第7章 使用必應(yīng)地圖和Firebase創(chuàng)建基于云的Angular地圖應(yīng)用程序 173
7.1 技術(shù)需求174
7.2 現(xiàn)代應(yīng)用程序及使用云服務(wù)的趨勢 174
7.3 項目概述174
7.4 在Angular中使用必應(yīng)地圖175
7.4.1 注冊必應(yīng)地圖 176
7.4.2 注冊Firebase 178
7.5 使用Angular和Firebase創(chuàng)建必應(yīng)地圖應(yīng)用程序181
7.5.1 添加地圖組件181
7.5.2 興趣點182
7.5.3 表示地圖圖釘184
7.5.4 使用地圖搜索做一些有趣的操作 186
7.5.5 將必應(yīng)地圖添加到屏幕上188
7.5.6 地圖事件和圖釘?shù)脑O(shè)置190
7.5.7 保護數(shù)據(jù)庫194
7.6 小結(jié)195
習(xí)題196
●第8章 使用React和微服務(wù)來構(gòu)建一個CRM 197
8.1 技術(shù)需求197
8.2 理解Docker和微服務(wù)198
8.2.1 Docker術(shù)語 198
8.2.2 微服務(wù) 199
8.2.3 使用Swagger設(shè)計REST API 200
8.3 使用Docker創(chuàng)建一個微服務(wù)應(yīng)用程序 203
8.3.1 開始使用Docker創(chuàng)建一個微服務(wù)應(yīng)用程序 204
8.3.2 添加服務(wù)器端路由支持 209
8.3.3 使用Docker運行服務(wù) 212
8.3.4 創(chuàng)建React UI 215
8.3.5 添加導(dǎo)航 223
8.4 小結(jié) 224
習(xí)題 225
延伸閱讀 225
●第9章 使用Vue.js和TensorFlow.js進行圖像識別 226
9.1 技術(shù)需求226
9.2 機器學(xué)習(xí)及TensorFlow簡介227
9.2.1 什么是機器學(xué)習(xí)228
9.2.2 TensorFlow及其與機器學(xué)習(xí)的關(guān)系228
9.3 項目概述229
9.4 開始在Vue中使用TensorFlow 229
9.4.1 創(chuàng)建基于Vue的應(yīng)用程序230
9.4.2 使用Vue模板顯示主頁232
9.4.3 修改HelloWorld組件來支持圖像分類236
9.4.4 Vue應(yīng)用程序的入口點 239
9.4.5 添加姿勢檢測功能243
9.4.6 完成姿勢檢測組件250
9.5 小結(jié) 253
習(xí)題254
延伸閱讀254
●第10章 構(gòu)建ASP.NET Core音樂庫255
10.1 技術(shù)需求255
10.2 ASP.NET Core MVC簡介256
10.3 項目概述258
10.4 開始使用ASP.NET Core、C#和TypeScript創(chuàng)建一個音樂庫259
10.4.1 使用Visual Studio創(chuàng)建ASP.NET Core應(yīng)用程序260
10.4.2 理解應(yīng)用程序結(jié)構(gòu)263
10.4.3 創(chuàng)建一個Discogs模型269
10.4.4 關(guān)聯(lián)控制器275
10.4.5 添加Index視圖276
10.4.6 向應(yīng)用程序添加TypeScript 279
10.4.7 從ASP.NET調(diào)用TypeScript功能 283
10.5 小結(jié) 285
習(xí)題 285
延伸閱讀 285
習(xí)題答案 287