本書旨在介紹TypeScript的語(yǔ)法和應(yīng)用。本書首先介紹TypeScript的基本語(yǔ)法,以幫助讀者編寫基本的應(yīng)用程序;然后講述TypeScript的進(jìn)階語(yǔ)法,這些語(yǔ)法可以滿足復(fù)雜項(xiàng)目中的編程要求;接著討論如何將TypeScript代碼編譯為JavaScript代碼,如何快速地編寫與調(diào)試TypeScript代碼,如何通過(guò)工具自動(dòng)檢查代碼的正確性;最后闡述如何在TypeScript項(xiàng)目中使用JavaScript,如何使用TypeScript開發(fā)前端項(xiàng)目與后端項(xiàng)目。
本書適合前端開發(fā)工程師、后端開發(fā)工程師以及對(duì)TypeScript感興趣的讀者閱讀。
1.由業(yè)界專業(yè)、實(shí)戰(zhàn)經(jīng)驗(yàn)豐富開發(fā)人員編寫,系統(tǒng)深入講解TypeScript,內(nèi)容豐富、通俗易懂,幫助讀者快速提高開發(fā)水平。
2.覆蓋了從基礎(chǔ)知識(shí)到實(shí)戰(zhàn)應(yīng)用的全部?jī)?nèi)容,包括進(jìn)階知識(shí)和實(shí)際項(xiàng)目中的應(yīng)用,是一本適合初學(xué)者和有經(jīng)驗(yàn)開發(fā)人員的完整指南。
3.作為JavaScript的超集,TypeScripts可以兼容所有已有的JavaScript代碼,也擴(kuò)展了JavaScript的語(yǔ)法,減少了開發(fā)錯(cuò)誤。這使得TypeScript成為一個(gè)非常實(shí)用的工具,本書將教你如何使用它。
4.詳細(xì)介紹了TypeScript的編譯方法、調(diào)試技術(shù)以及自動(dòng)檢查代碼的正確性等技巧,幫助開發(fā)人員快速提高工作效率。
5.TypeScript 可以用于前端和后端項(xiàng)目,應(yīng)用場(chǎng)景廣泛。不管是做電商網(wǎng)站還是企業(yè)級(jí)應(yīng)用系統(tǒng),本書都能給你提供best實(shí)踐和解決方案。
趙卓,新蛋科技有限公司電子商務(wù)研發(fā)團(tuán)隊(duì)項(xiàng)目經(jīng)理,從事過(guò)多年測(cè)試工作和開發(fā)工作,精通各類開發(fā)和測(cè)試技術(shù)。編寫過(guò)的圖書有《Kubernetes從入門到實(shí)踐》《Selenium自動(dòng)化測(cè)試完全指南:基于Python》,翻譯過(guò)的圖書有《精通Selenium WebDriver 3.0(第2版)》等。
目 錄
第 一部分 基礎(chǔ)語(yǔ)法
第 1章 TypeScript簡(jiǎn)介 3
1.1 TypeScript的發(fā)展史 3
1.1.1 JavaScript的興起 3
1.1.2 JavaScript的缺陷 5
1.1.3 TypeScript的誕生 6
1.2 搭建TypeScript開發(fā)環(huán)境 7
1.2.1 安裝Node.js 7
1.2.2 安裝TypeScript 8
1.2.3 安裝Visual Studio Code 8
1.3 編寫第 一個(gè)TypeScript
程序:Hello World 10
1.3.1 編寫并運(yùn)行
TypeScript程序 10
1.3.2 靜態(tài)檢查和智能提示 11
第 2章 語(yǔ)法結(jié)構(gòu)與類型結(jié)構(gòu) 13
2.1 語(yǔ)法結(jié)構(gòu) 13
2.1.1 聲明變量 14
2.1.2 標(biāo)識(shí)符名稱 14
2.1.3 數(shù)據(jù)類型 15
2.1.4 運(yùn)算符 15
2.1.5 字面量 16
2.1.6 分號(hào)與斷句 16
2.1.7 注釋 17
2.1.8 表達(dá)式 17
2.1.9 流程控制 17
2.1.10 代碼塊 18
2.2 類型結(jié)構(gòu) 19
第3章 原始類型 20
3.1 布爾類型 20
3.2 數(shù)值類型 21
3.3 長(zhǎng)整型 22
3.4 字符串類型 22
3.5 枚舉類型 24
3.5.1 數(shù)值枚舉 24
3.5.2 字符串枚舉 26
3.5.3 應(yīng)慎用的枚舉使用方式 26
3.5.4 常量枚舉 28
3.6 symbol 29
3.7 undefined、null和NaN 29
3.7.1 undefined 29
3.7.2 null 30
3.7.3 NaN 30
3.8 類型轉(zhuǎn)換 30
3.8.1 將其他類型轉(zhuǎn)換為
布爾類型 30
3.8.2 將其他類型轉(zhuǎn)換為數(shù)值
類型 31
3.8.3 將其他類型轉(zhuǎn)換為
長(zhǎng)整型 33
3.8.4 將其他類型轉(zhuǎn)換為字符串類型 33
3.9 字面量類型 34
3.10 變量與常量 35
3.10.1 let關(guān)鍵字 35
3.10.2 const關(guān)鍵字 37
第4章 表達(dá)式與運(yùn)算符 38
4.1 算術(shù)運(yùn)算符 38
4.2 賦值運(yùn)算符 40
4.3 字符串運(yùn)算符 40
4.4 比較運(yùn)算符 41
4.5 條件運(yùn)算符 43
4.6 邏輯運(yùn)算符 44
4.7 類型運(yùn)算符 45
4.8 位運(yùn)算符 46
4.9 運(yùn)算符的優(yōu)先級(jí) 47
第5章 流程控制 50
5.1 選擇語(yǔ)句 50
5.1.1 if/if…else/if…else if語(yǔ)句 51
5.1.2 switch語(yǔ)句 54
5.2 循環(huán)語(yǔ)句 57
5.2.1 for語(yǔ)句 57
5.2.2 while語(yǔ)句 60
5.2.3 do…while語(yǔ)句 60
5.2.4 break與continue 關(guān)鍵字 61
第6章 引用類型 62
6.1 原始值與引用值 62
6.1.1 值的復(fù)制 63
6.1.2 值的傳遞 64
6.1.3 值的比較 65
6.1.4 常量的使用 66
6.2 引用類型分類 66
第7章 數(shù)組與元組 69
7.1 數(shù)組 69
7.1.1 數(shù)組的聲明與讀寫 69
7.1.2 數(shù)組的遍歷 70
7.1.3 數(shù)組的方法 70
7.1.4 只讀數(shù)組 77
7.1.5 多維數(shù)組 77
7.2 元組 77
7.2.1 元組的聲明和讀寫 77
7.2.2 可選元素與剩余元素 78
7.2.3 元組的方法 79
7.2.4 將元組轉(zhuǎn)換為數(shù)組 79
第8章 函數(shù) 81
8.1 函數(shù)的聲明與調(diào)用 81
8.1.1 以普通方式聲明與調(diào)用 81
8.1.2 通過(guò)表達(dá)式聲明與調(diào)用 82
8.1.3 特殊的聲明與調(diào)用方式 84
8.2 函數(shù)的參數(shù)與返回值 85
8.2.1 普通參數(shù)與類型推導(dǎo) 86
8.2.2 可選參數(shù) 87
8.2.3 默認(rèn)參數(shù) 88
8.2.4 剩余參數(shù) 88
8.2.5 返回值 90
8.3 函數(shù)的調(diào)用簽名與重載 92
8.3.1 調(diào)用簽名 92
8.3.2 重載函數(shù) 93
8.4 函數(shù)的內(nèi)置屬性 96
8.4.1 arguments 96
8.4.2 caller 97
8.4.3 this 98
8.5 函數(shù)的內(nèi)置方法 100
8.5.1 apply()和call() 100
8.5.2 bind() 100
第9章 接口與對(duì)象 103
9.1 對(duì)象的聲明 103
9.1.1 使用對(duì)象類型字面量
聲明對(duì)象 104
9.1.2 使用類型別名聲明
對(duì)象 106
9.1.3 使用接口聲明對(duì)象 107
9.2 屬性或方法的修飾符 107
9.2.1 可選修飾符 107
9.2.2 只讀修飾符 108
9.2.3 索引簽名 109
9.3 接口的合并 112
9.3.1 接口繼承 112
9.3.2 交叉類型 113
9.3.3 聲明合并 113
9.3.4 接口合并時(shí)的沖突 114
9.4 特殊對(duì)象類型 116
9.4.1 object 116
9.4.2 Object和{} 117
第 10章 類 119
10.1 類的聲明 119
10.1.1 基本聲明語(yǔ)法 119
10.1.2 創(chuàng)建實(shí)例對(duì)象 120
10.2 類的成員 121
10.2.1 屬性 121
10.2.2 方法 123
10.2.3 構(gòu)造函數(shù) 125
10.2.4 存取器 126
10.2.5 索引成員 128
10.3 類的繼承 129
10.3.1 簡(jiǎn)單的繼承 129
10.3.2 重寫父類成員 130
10.3.3 復(fù)用父類成員 134
10.4 繼承接口與抽象類 135
10.4.1 繼承接口 135
10.4.2 繼承抽象類 137
10.5 成員的可訪問(wèn)性 139
10.5.1 public 139
10.5.2 protected 140
10.5.3 private 140
10.5.4 可訪問(wèn)性的兼容性 142
10.6 靜態(tài)成員 143
10.6.1 靜態(tài)成員的聲明與
訪問(wèn) 143
10.6.2 靜態(tài)成員的繼承 143
10.6.3 靜態(tài)代碼塊 144
10.7 其他應(yīng)用與注意事項(xiàng) 145
10.7.1 類的初始化順序 145
10.7.2 參數(shù)屬性 146
10.7.3 類表達(dá)式 146
10.7.4 不夠嚴(yán)格的類 147
10.7.5 instanceof運(yùn)算符 148
第 11章 頂部類型與底部類型 149
11.1 any 149
11.2 unknown 150
11.3 類型斷言與類型防護(hù) 151
11.4 never 152
第 12章 進(jìn)階類型 154
12.1 泛型 154
12.1.1 泛型的基礎(chǔ)用法 154
12.1.2 在函數(shù)中使用泛型 155
12.1.3 在類中使用泛型 157
12.1.4 泛型類型 158
12.1.5 泛型約束 159
12.2 類型別名 160
12.2.1 類型別名的基本用法 160
12.2.2 類型別名與接口的區(qū)別 161
12.3 聯(lián)合類型與交叉類型 162
12.3.1 聯(lián)合類型 162
12.3.2 交叉類型 163
第二部分 進(jìn)階語(yǔ)法
第 13章 模塊與命名空間 167
13.1 模塊 167
13.1.1 導(dǎo)出模塊 167
13.1.2 使用被導(dǎo)出的模塊 170
13.1.3 導(dǎo)入與導(dǎo)出TypeScript類型聲明 173
13.1.4 導(dǎo)入或?qū)С瞿K時(shí)的注意事項(xiàng) 175
13.1.5 編譯與運(yùn)行模塊 176
13.1.6 解析模塊路徑 184
13.2 命名空間 185
13.2.1 聲明命名空間 186
13.2.2 使用命名空間的成員 187
13.2.3 在多文件中使用命名空間 189
13.2.4 命名空間的本質(zhì)與局限 190
13.3 聲明合并 190
13.3.1 同類型之間的聲明合并 191
13.3.2 不同類型之間的聲明合并 193
第 14章 錯(cuò)誤處理 195
14.1 捕獲并處理錯(cuò)誤 195
14.2 錯(cuò)誤對(duì)象 198
14.3 自定義錯(cuò)誤 200
14.3.1 拋出錯(cuò)誤 200
14.3.2 自定義錯(cuò)誤類型 201
第 15章 異步編程 203
15.1 異步任務(wù)運(yùn)行機(jī)制 203
15.2 回調(diào)函數(shù) 205
15.2.1 常規(guī)異步任務(wù) 205
15.2.2 計(jì)時(shí)器 207
15.3 Promise對(duì)象 209
15.3.1 聲明并使用Promise對(duì)象 209
15.3.2 錯(cuò)誤處理 212
15.3.3 最終必須被執(zhí)行的代碼 213
15.3.4 組合Promise對(duì)象 214
15.3.5 創(chuàng)建resolved或rejected狀態(tài)的Promise對(duì)象 215
15.4 異步函數(shù) 215
15.4.1 Promise對(duì)象的局限性 215
15.4.2 使用async創(chuàng)建異步函數(shù) 217
15.4.3 通過(guò)await使用異步函數(shù) 217
15.4.4 以異步函數(shù)優(yōu)化Promise對(duì)象 218
第 16章 內(nèi)置引用對(duì)象 220
16.1 Date對(duì)象 220
16.1.1 創(chuàng)建日期 220
16.1.2 格式化日期 221
16.1.3 獲取或設(shè)置日期 222
16.2 RegExp對(duì)象 224
16.2.1 創(chuàng)建RegExp對(duì)象 224
16.2.2 在字符串的方法中傳入RegExp對(duì)象 225
16.2.3 直接使用RegExp對(duì)象 226
16.3 單例內(nèi)置對(duì)象 227
16.3.1 globalThis對(duì)象 227
16.3.2 Math對(duì)象 228
16.3.3 console對(duì)象 230
第 17章 多線程編程 233
17.1 瀏覽器多線程—Web Worker 233
17.1.1 Web Worker的工作原理 233
17.1.2 專用Worker線程 234
17.1.3 共享Worker線程 237
17.1.4 Worker線程間的數(shù)據(jù)傳遞 239
17.2 服務(wù)器多線程:Worker Threads 240
17.2.1 基本使用 240
17.2.2 錯(cuò)誤處理 242
17.2.3 其他事件 242
17.2.4 注冊(cè)一次性事件 243
第三部分 編譯與調(diào)試
第 18章 編譯 247
18.1 編譯命令 247
18.1.1 直接編譯指定文件 247
18.1.2 編譯選項(xiàng):編譯文件及輸出路徑 248
18.1.3 編譯選項(xiàng):按需輸出 JavaScript代碼 249
18.1.4 編譯選項(xiàng):具有調(diào)試作用的選項(xiàng) 250
18.1.5 編譯選項(xiàng):類型 檢查 251
18.2 配置文件 255
18.2.1 tsconfig.json文件的創(chuàng)建及匹配規(guī)則 255
18.2.2 文件列表 257
18.2.3 編譯選項(xiàng) 259
18.2.4 項(xiàng)目引用 261
18.2.5 配置繼承 265
18.2.6 其他配置 267
18.3 三斜線指令 268
18.3.1 引用其他文件 269
18.3.2 指定包含在編譯中的庫(kù)文件 269
18.3.3 注意事項(xiàng)及其他指令 270
第 19章 在IDE中編寫和調(diào)試代碼 272
19.1 使用Visual Studio Code編寫代碼 272
19.1.1 常用功能 272
19.1.2 代碼編寫選項(xiàng) 274
19.1.3 擴(kuò)展功能 278
19.2 調(diào)試TypeScript代碼 279
19.2.1 在IDE中調(diào)試代碼 279
19.2.2 在瀏覽器中調(diào)試代碼 280
第 20章 引入擴(kuò)展工具 282
20.1 引入靜態(tài)檢查工具 ESLint 282
20.1.1 ESLint的安裝與 應(yīng)用 282
20.1.2 配置檢查規(guī)則 284
20.2 引入單元測(cè)試工具Jest 285
20.2.1 Jest的安裝與 配置 285
20.2.2 編寫和執(zhí)行單元測(cè)試 286
第四部分 項(xiàng)目應(yīng)用
第 21章 在TypeScript項(xiàng)目中使用JavaScript 291
21.1 使用聲明文件 291
21.1.1 使用聲明文件的原因 291
21.1.2 為JavaScript編寫聲明文件 293
21.1.3 為TypeScript生成聲明 文件 296
21.2 使用第三方 JavaScript 296
21.2.1 使用自帶聲明文件的第三方庫(kù) 296
21.2.2 使用DefinitelyTyped聲明文件庫(kù) 297
21.2.3 自行編寫聲明模塊 297
21.3 將項(xiàng)目從JavaScript遷移到TypeScript中 299
第 22章 使用TypeScript開發(fā)后端項(xiàng)目 300
22.1 后端開發(fā)簡(jiǎn)介 301
22.1.1 常用的后端框架 301
22.1.2 Express框架的用法 301
22.2 實(shí)戰(zhàn)項(xiàng)目案例:編寫任務(wù)管理系統(tǒng)后端API 304
22.2.1 編寫任務(wù)類型聲明并實(shí)現(xiàn) 任務(wù)數(shù)據(jù)訪問(wèn)功能 304
22.2.2 編寫任務(wù)管理后端 服務(wù)API 306
第 23章 使用TypeScript開發(fā)前端項(xiàng)目 309
23.1 前端開發(fā)簡(jiǎn)介 309
23.1.1 常用的前端框架 309
23.1.2 React框架的用法 310
23.2 實(shí)戰(zhàn)項(xiàng)目案例:編寫任務(wù)管理系統(tǒng)的前端界面 311
23.2.1 編寫任務(wù)類型聲明及任務(wù)管理后端API 312
23.2.2 編寫添加任務(wù)UI組件及任務(wù)列表項(xiàng)UI組件 313
23.2.3 編寫任務(wù)管理頁(yè)面及樣式 315