本書是一本TypeScript進(jìn)階實(shí)踐指南,通過9個(gè)實(shí)用項(xiàng)目,詳細(xì)講解如何使用TypeScript 3.0和不同的JavaScript框架開發(fā)高質(zhì)量的應(yīng)用程序。書中不僅介紹TypeScript的核心概念與技術(shù),還涵蓋Angular和React的一些新功能,以及GraphQL、微服務(wù)和機(jī)器學(xué)習(xí)等相關(guān)的新技術(shù)。
全書共10章:
第1章介紹你之前可能沒有接觸過的TypeScript功能,
第2章將編寫第一個(gè)實(shí)用的項(xiàng)目——一個(gè)簡單的markdown編輯器,
第3章將使用流行的React庫構(gòu)建一個(gè)聯(lián)系人管理器,
第4章介紹MEAN棧,
第5章介紹如何使用GraphQL和Apollo創(chuàng)建Angular待辦事項(xiàng)應(yīng)用程序,
第6章介紹如何使用Socket.IO構(gòu)建一個(gè)聊天室應(yīng)用程序,
第7章介紹如何使用必應(yīng)地圖和Firebase創(chuàng)建基于云的Angular地圖應(yīng)用程序,
第8章介紹如何使用一個(gè)等效的基于React的棧,
第9章介紹如何使用TensorFlow.js在Web瀏覽器中托管機(jī)器學(xué)習(xí),
第10章介紹如何使用ASP.NET Core和免費(fèi)的Discogs音樂API來編寫一個(gè)音樂庫應(yīng)用程序。
【通過閱讀本書,你將學(xué)到】:
●使用TypeScript和常用模式編寫代碼。
●在TypeScript中使用流行的框架和庫。
●使用TypeScript來利用服務(wù)器和客戶端的功能。
●應(yīng)用令人興奮的新范式,如GraphQL和TensorFlow。
●使用流行的、基于云的身份驗(yàn)證服務(wù)。
●結(jié)合TypeScript和C#來創(chuàng)建ASP.NET Core應(yīng)用程序。
本書介紹的是TypeScript,你從書名中其實(shí)已經(jīng)知道了這一點(diǎn)。不過,本書不僅介紹TypeScript,還將介紹如何使用TypeScript完成一些比較復(fù)雜的項(xiàng)目。因此,本書介紹的主題比你之前學(xué)習(xí)過的TypeScript相關(guān)主題可能稍微難一些。
所以,我們也許可以把開場白改為這樣:本書介紹的是TypeScript,以及如何用有趣的方式使用TypeScript和一些高級技術(shù)來創(chuàng)建有趣的項(xiàng)目。
必須說明,本書不介紹如何使用Angular、React、Vue或ASP.NET Core進(jìn)行編程。這些都是龐大的主題,應(yīng)該用整本書的篇幅進(jìn)行解釋(事實(shí)上,在每章末尾,我盡量推薦一些資源,它們能夠幫助你更深入地了解相關(guān)主題)。對于Angular和React,我將每章介紹的新功能的相關(guān)概念限制在5個(gè)以內(nèi)。當(dāng)使用的技術(shù)(如Bootstrap)具有針對其他技術(shù)的具體實(shí)現(xiàn)時(shí),我們將使用最合適的庫,例如為React使用reactstrap。之所以如此,是因?yàn)檫@些庫是針對相應(yīng)用戶界面(User Interface,UI)框架設(shè)計(jì)的。
在為本書做最初調(diào)查時(shí),有個(gè)問題一再浮現(xiàn):現(xiàn)在的熱點(diǎn)技術(shù)是什么?人們在使用什么新的、令人興奮的新技術(shù)?本書旨在介紹一些這樣的技術(shù),包括GraphQL、微服務(wù)和機(jī)器學(xué)習(xí)。同樣,本書無法介紹相關(guān)技術(shù)的所有信息。所以,本書只是簡單介紹這些技術(shù),并展示在使用這些技術(shù)進(jìn)行開發(fā)時(shí),TypeScript的強(qiáng)大功能可以讓開發(fā)工作變得簡單許多。
在閱讀本書的過程中,你會發(fā)現(xiàn)我非常關(guān)注使用面向?qū)ο缶幊蹋∣bject-Oriented Programming,OOP)。我們將構(gòu)建大量的類。這么做有許多原因,但最主要的是前面章節(jié)中編寫的代碼將能夠在后面的章節(jié)中重用。而且,我希望編寫出的代碼能讓你直接添加到自己的代碼庫中。在TypeScript中,基于類的開發(fā)讓實(shí)現(xiàn)這些目的變得簡單多了。另外,即使使用了比較高級的技術(shù),這也使我們能夠介紹一些讓代碼變得更加簡單的方法,所以我們討論了一些原則,例如讓類具有單一職責(zé)(稱為單一職責(zé)模式),以及基于模式的開發(fā),即通過對復(fù)雜問題應(yīng)用眾所周知的軟件開發(fā)模式,讓解決方案變得更加簡單。
除了TypeScript,我們還將在大部分章節(jié)中使用Bootstrap設(shè)計(jì)UI。在介紹Angular的兩章中,我們則介紹如何使用Angular Material布局界面,因?yàn)镸aterial和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章將編寫第一個(gè)實(shí)用的項(xiàng)目:一個(gè)簡單的markdown編輯器。我們將創(chuàng)建一個(gè)簡單的解析器,在Web頁面內(nèi)將其綁定到一個(gè)文本塊,用來識別用戶何時(shí)輸入一個(gè)markdown標(biāo)簽,并在預(yù)覽區(qū)域反映出效果。在編寫該章的代碼時(shí),我們將介紹如何在TypeScript中使用設(shè)計(jì)模式來構(gòu)建更加健壯的解決方案。
第3章將使用流行的React庫構(gòu)建一個(gè)聯(lián)系人管理器。在編寫這個(gè)應(yīng)用程序時(shí),我們將看到React如何使用特殊的TSX文件來混合TypeScript及HTML,最終生成用戶組件。我們還將看到如何在React中使用綁定和狀態(tài),在用戶改變值時(shí)自動(dòng)更新數(shù)據(jù)模型。這里的最終目的是創(chuàng)建一個(gè)UI,允許用戶輸入數(shù)據(jù),并使用瀏覽器自己的IndexedDB數(shù)據(jù)庫來保存和檢索信息,以及了解如何對組件應(yīng)用驗(yàn)證來確保輸入有效。
第4章介紹MEAN棧,這是我們第一次接觸MEAN。MEAN棧指的是一組相互協(xié)作的技術(shù),用來構(gòu)建能夠在客戶端和服務(wù)器運(yùn)行的應(yīng)用程序。我們使用MEAN棧來編寫一個(gè)相冊應(yīng)用程序,使用Angular創(chuàng)建UI,使用MongoDB存儲用戶上傳的圖片。在創(chuàng)建這個(gè)應(yīng)用程序時(shí),我們將使用Angular來創(chuàng)建服務(wù)和組件。同時(shí),我們將看到如何使用Angular Material來創(chuàng)建有吸引力的UI。
第5章告訴我們,并非只能使用REST在客戶端與服務(wù)器之間進(jìn)行通信,F(xiàn)在很熱門的一個(gè)主題是使用GraphQL創(chuàng)建應(yīng)用程序,讓這種應(yīng)用程序使用GraphQL服務(wù)器和客戶端來使用和更新來自多個(gè)源的數(shù)據(jù)。該章編寫的Angular應(yīng)用程序?qū)橛脩艄芾硪粋(gè)待辦事項(xiàng)列表,并進(jìn)一步演示Angular的功能,例如使用模板在只讀功能和可編輯功能之間進(jìn)行切換,另外還將介紹Angular為驗(yàn)證用戶輸入提供的功能。
第6章進(jìn)一步探索不依賴REST通信的思想。我們將介紹如何在Angular中創(chuàng)建一個(gè)長時(shí)間運(yùn)行的客戶端/服務(wù)器應(yīng)用程序,讓客戶端和服務(wù)器連接,從而能夠在客戶端和服務(wù)器之間來回發(fā)送消息。我們將使用Socket.IO編寫一個(gè)聊天室應(yīng)用程序。為了進(jìn)一步增強(qiáng)代碼,我們將使用一個(gè)外部身份驗(yàn)證提供商來幫助我們專業(yè)地保護(hù)應(yīng)用程序,從而避免一些令人尷尬的身份驗(yàn)證問題,例如用明文存儲密碼。
第7章將說明我們已經(jīng)無法忽視云服務(wù)的發(fā)展。該章將創(chuàng)建的應(yīng)用程序是最后一個(gè)Angular應(yīng)用程序,它使用了兩個(gè)不同的、基于云的服務(wù)。第一個(gè)云服務(wù)是必應(yīng)地圖,我們在這里展示了如何注冊一個(gè)第三方的云地圖服務(wù),并把它集成到自己的應(yīng)用程序中。我們將介紹該服務(wù)對不同使用規(guī)模的收費(fèi)情況。我們將顯示一個(gè)地圖來讓用戶保存興趣點(diǎn),并通過使用Google的Firebase云平臺,把這些數(shù)據(jù)存儲到一個(gè)單獨(dú)的云數(shù)據(jù)庫中。
第8章利用前面使用React和MEAN棧的經(jīng)驗(yàn),介紹如何使用一個(gè)等效的基于React的棧。我們第一次接觸MEAN時(shí),使用REST來與一個(gè)應(yīng)用程序端點(diǎn)通信。而在該章的應(yīng)用程序中,我們將與多個(gè)微服務(wù)通信,創(chuàng)建一個(gè)簡化的基于React的CRM系統(tǒng)。我們將討論什么是微服務(wù),什么時(shí)候使用微服務(wù),以及如何使用Swagger來設(shè)計(jì)REST API及創(chuàng)建其文檔。該章將重點(diǎn)介紹Docker,展示如何在不同的容器中運(yùn)行不同的服務(wù)。容器是目前在開發(fā)人員中最熱門的主題之一,因?yàn)樗鼈兡軌蚝喕瞥鰬?yīng)用程序的過程,并且使用起來不那么困難。
第9章介紹如何使用TensorFlow.js在Web瀏覽器中托管機(jī)器學(xué)習(xí)。我們將使用流行的Vue.js框架編寫一個(gè)應(yīng)用程序,使用預(yù)訓(xùn)練的圖像模型來識別圖像。之后將介紹如何創(chuàng)建一個(gè)姿勢檢測應(yīng)用程序,識別圖像中人的姿勢。可以擴(kuò)展這個(gè)應(yīng)用程序,使用攝像頭來跟蹤姿勢,從而方便體育教練執(zhí)教。
第10章偏離了之前的主題。前面已經(jīng)編寫了多個(gè)應(yīng)用程序,使用TypeScript作為主要編程語言來構(gòu)建UI。該章將使用ASP.NET Core和免費(fèi)的Discogs音樂API來編寫一個(gè)音樂庫應(yīng)用程序,允許用戶輸入藝術(shù)家的姓名并搜索其音樂作品的詳細(xì)信息。我們將結(jié)合使用C#和TypeScript來查詢Discogs并構(gòu)建UI。
【如何使用本書】
在閱讀本書前,你應(yīng)該了解TypeScript的基礎(chǔ)知識。對HTML和Web頁面的了解也會很有用。
當(dāng)下載代碼使用包管理器(如npm)時(shí),你需要知道如何恢復(fù)包,因?yàn)槲覀儧]有在代碼存儲庫中包含這些包。要恢復(fù)包,可以在package.json所在的目錄中使用npm install。
在最后一章中,你不需要自己下載缺少的包。當(dāng)生成項(xiàng)目時(shí),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 使用裝飾器進(jìn)行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)建一個(gè)markdown編輯器 32
2.1 技術(shù)需求33
2.2 項(xiàng)目概述33
2.3 開始創(chuàng)建一個(gè)簡單的HTML項(xiàng)目34
2.4 編寫一個(gè)簡單的markdown解析器34
2.4.1 創(chuàng)建Bootstrap UI 35
2.4.2 將markdown標(biāo)簽類型映射到HTML標(biāo)簽類型38
2.4.3 使用MarkdownDocument類表示轉(zhuǎn)換后的markdown標(biāo)記 41
2.4.4 使用訪問者更新markdown文檔 42
2.4.5 通過使用責(zé)任鏈模式?jīng)Q定應(yīng)用哪個(gè)標(biāo)簽 44
2.4.6 綜合運(yùn)用 48
2.5 小結(jié) 49
延伸閱讀50
●第3章 React Bootstrap聯(lián)系人管理器 51
3.1 技術(shù)需求 51
3.2 項(xiàng)目概述 52
3.3 開始使用組件 52
3.4 創(chuàng)建一個(gè)支持TypeScript的React Bootstrap項(xiàng)目 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 顯示個(gè)人信息界面59
3.8 驗(yàn)證用戶輸入及驗(yàn)證器的使用 65
3.8.1 驗(yàn)證地址66
3.8.2 驗(yàn)證姓名68
3.8.3 驗(yàn)證電話號碼68
3.9 在React組件中應(yīng)用驗(yàn)證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 增強(qiáng)代碼83
3.12 小結(jié)83
習(xí)題84
延伸閱讀84
●第4章 MEAN!獦(gòu)建一個(gè)相冊 85
4.1 技術(shù)需求86
4.2 MEAN棧86
4.3 項(xiàng)目概述87
4.4 準(zhǔn)備工作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)建第一個(gè)組件——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待辦事項(xiàng)應(yīng)用程序 117
5.1 技術(shù)需求118
5.2 理解GraphQL與REST的關(guān)系118
5.3 項(xiàng)目概述119
5.4 準(zhǔn)備工作120
5.5 使用GraphQL和Angular創(chuàng)建待辦事項(xià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)建一個(gè)聊天室應(yīng)用程序 151
6.1 技術(shù)需求152
6.2 使用Socket.IO建立客戶端/服務(wù)器之間的長時(shí)間通信 152
6.3 項(xiàng)目概述152
6.4 開始使用Socket.IO和Angular 153
6.5 使用Socket.IO、Angular和Auth0創(chuàng)建一個(gè)聊天室應(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)和驗(yà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 項(xiàng)目概述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 興趣點(diǎn)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 保護(hù)數(shù)據(jù)庫194
7.6 小結(jié)195
習(xí)題196
●第8章 使用React和微服務(wù)來構(gòu)建一個(gè)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è)計(jì)REST API 200
8.3 使用Docker創(chuàng)建一個(gè)微服務(wù)應(yīng)用程序 203
8.3.1 開始使用Docker創(chuàng)建一個(gè)微服務(wù)應(yīng)用程序 204
8.3.2 添加服務(wù)器端路由支持 209
8.3.3 使用Docker運(yùn)行服務(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進(jìn)行圖像識別 226
9.1 技術(shù)需求226
9.2 機(jī)器學(xué)習(xí)及TensorFlow簡介227
9.2.1 什么是機(jī)器學(xué)習(xí)228
9.2.2 TensorFlow及其與機(jī)器學(xué)習(xí)的關(guān)系228
9.3 項(xiàng)目概述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)用程序的入口點(diǎn) 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 項(xiàng)目概述258
10.4 開始使用ASP.NET Core、C#和TypeScript創(chuàng)建一個(gè)音樂庫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)建一個(gè)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