本書旨在介紹TypeScript的語法和應(yīng)用。本書首先介紹TypeScript的基本語法,以幫助讀者編寫基本的應(yīng)用程序;然后講述TypeScript的進階語法,這些語法可以滿足復(fù)雜項目中的編程要求;接著討論如何將TypeScript代碼編譯為JavaScript代碼,如何快速地編寫與調(diào)試TypeScript代碼,如何通過工具自動檢查代碼的正確性;最后闡述如何在TypeScript項目中使用JavaScript,如何使用TypeScript開發(fā)前端項目與后端項目。
本書適合前端開發(fā)工程師、后端開發(fā)工程師以及對TypeScript感興趣的讀者閱讀。
1.由業(yè)界專業(yè)、實戰(zhàn)經(jīng)驗豐富開發(fā)人員編寫,系統(tǒng)深入講解TypeScript,內(nèi)容豐富、通俗易懂,幫助讀者快速提高開發(fā)水平。
2.覆蓋了從基礎(chǔ)知識到實戰(zhàn)應(yīng)用的全部內(nèi)容,包括進階知識和實際項目中的應(yīng)用,是一本適合初學(xué)者和有經(jīng)驗開發(fā)人員的完整指南。
3.作為JavaScript的超集,TypeScripts可以兼容所有已有的JavaScript代碼,也擴展了JavaScript的語法,減少了開發(fā)錯誤。這使得TypeScript成為一個非常實用的工具,本書將教你如何使用它。
4.詳細介紹了TypeScript的編譯方法、調(diào)試技術(shù)以及自動檢查代碼的正確性等技巧,幫助開發(fā)人員快速提高工作效率。
5.TypeScript 可以用于前端和后端項目,應(yīng)用場景廣泛。不管是做電商網(wǎng)站還是企業(yè)級應(yīng)用系統(tǒng),本書都能給你提供best實踐和解決方案。
趙卓,新蛋科技有限公司電子商務(wù)研發(fā)團隊項目經(jīng)理,從事過多年測試工作和開發(fā)工作,精通各類開發(fā)和測試技術(shù)。編寫過的圖書有《Kubernetes從入門到實踐》《Selenium自動化測試完全指南:基于Python》,翻譯過的圖書有《精通Selenium WebDriver 3.0(第2版)》等。
目 錄
第 一部分 基礎(chǔ)語法
第 1章 TypeScript簡介 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 編寫第 一個TypeScript
程序:Hello World 10
1.3.1 編寫并運行
TypeScript程序 10
1.3.2 靜態(tài)檢查和智能提示 11
第 2章 語法結(jié)構(gòu)與類型結(jié)構(gòu) 13
2.1 語法結(jié)構(gòu) 13
2.1.1 聲明變量 14
2.1.2 標(biāo)識符名稱 14
2.1.3 數(shù)據(jù)類型 15
2.1.4 運算符 15
2.1.5 字面量 16
2.1.6 分號與斷句 16
2.1.7 注釋 17
2.1.8 表達式 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 長整型 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)換為
長整型 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章 表達式與運算符 38
4.1 算術(shù)運算符 38
4.2 賦值運算符 40
4.3 字符串運算符 40
4.4 比較運算符 41
4.5 條件運算符 43
4.6 邏輯運算符 44
4.7 類型運算符 45
4.8 位運算符 46
4.9 運算符的優(yōu)先級 47
第5章 流程控制 50
5.1 選擇語句 50
5.1.1 if/if…else/if…else if語句 51
5.1.2 switch語句 54
5.2 循環(huán)語句 57
5.2.1 for語句 57
5.2.2 while語句 60
5.2.3 do…while語句 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 通過表達式聲明與調(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 默認參數(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章 接口與對象 103
9.1 對象的聲明 103
9.1.1 使用對象類型字面量
聲明對象 104
9.1.2 使用類型別名聲明
對象 106
9.1.3 使用接口聲明對象 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 接口合并時的沖突 114
9.4 特殊對象類型 116
9.4.1 object 116
9.4.2 Object和{} 117
第 10章 類 119
10.1 類的聲明 119
10.1.1 基本聲明語法 119
10.1.2 創(chuàng)建實例對象 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 簡單的繼承 129
10.3.2 重寫父類成員 130
10.3.3 復(fù)用父類成員 134
10.4 繼承接口與抽象類 135
10.4.1 繼承接口 135
10.4.2 繼承抽象類 137
10.5 成員的可訪問性 139
10.5.1 public 139
10.5.2 protected 140
10.5.3 private 140
10.5.4 可訪問性的兼容性 142
10.6 靜態(tài)成員 143
10.6.1 靜態(tài)成員的聲明與
訪問 143
10.6.2 靜態(tài)成員的繼承 143
10.6.3 靜態(tài)代碼塊 144
10.7 其他應(yīng)用與注意事項 145
10.7.1 類的初始化順序 145
10.7.2 參數(shù)屬性 146
10.7.3 類表達式 146
10.7.4 不夠嚴(yán)格的類 147
10.7.5 instanceof運算符 148
第 11章 頂部類型與底部類型 149
11.1 any 149
11.2 unknown 150
11.3 類型斷言與類型防護 151
11.4 never 152
第 12章 進階類型 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
第二部分 進階語法
第 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時的注意事項 175
13.1.5 編譯與運行模塊 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章 錯誤處理 195
14.1 捕獲并處理錯誤 195
14.2 錯誤對象 198
14.3 自定義錯誤 200
14.3.1 拋出錯誤 200
14.3.2 自定義錯誤類型 201
第 15章 異步編程 203
15.1 異步任務(wù)運行機制 203
15.2 回調(diào)函數(shù) 205
15.2.1 常規(guī)異步任務(wù) 205
15.2.2 計時器 207
15.3 Promise對象 209
15.3.1 聲明并使用Promise對象 209
15.3.2 錯誤處理 212
15.3.3 最終必須被執(zhí)行的代碼 213
15.3.4 組合Promise對象 214
15.3.5 創(chuàng)建resolved或rejected狀態(tài)的Promise對象 215
15.4 異步函數(shù) 215
15.4.1 Promise對象的局限性 215
15.4.2 使用async創(chuàng)建異步函數(shù) 217
15.4.3 通過await使用異步函數(shù) 217
15.4.4 以異步函數(shù)優(yōu)化Promise對象 218
第 16章 內(nèi)置引用對象 220
16.1 Date對象 220
16.1.1 創(chuàng)建日期 220
16.1.2 格式化日期 221
16.1.3 獲取或設(shè)置日期 222
16.2 RegExp對象 224
16.2.1 創(chuàng)建RegExp對象 224
16.2.2 在字符串的方法中傳入RegExp對象 225
16.2.3 直接使用RegExp對象 226
16.3 單例內(nèi)置對象 227
16.3.1 globalThis對象 227
16.3.2 Math對象 228
16.3.3 console對象 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 錯誤處理 242
17.2.3 其他事件 242
17.2.4 注冊一次性事件 243
第三部分 編譯與調(diào)試
第 18章 編譯 247
18.1 編譯命令 247
18.1.1 直接編譯指定文件 247
18.1.2 編譯選項:編譯文件及輸出路徑 248
18.1.3 編譯選項:按需輸出 JavaScript代碼 249
18.1.4 編譯選項:具有調(diào)試作用的選項 250
18.1.5 編譯選項:類型 檢查 251
18.2 配置文件 255
18.2.1 tsconfig.json文件的創(chuàng)建及匹配規(guī)則 255
18.2.2 文件列表 257
18.2.3 編譯選項 259
18.2.4 項目引用 261
18.2.5 配置繼承 265
18.2.6 其他配置 267
18.3 三斜線指令 268
18.3.1 引用其他文件 269
18.3.2 指定包含在編譯中的庫文件 269
18.3.3 注意事項及其他指令 270
第 19章 在IDE中編寫和調(diào)試代碼 272
19.1 使用Visual Studio Code編寫代碼 272
19.1.1 常用功能 272
19.1.2 代碼編寫選項 274
19.1.3 擴展功能 278
19.2 調(diào)試TypeScript代碼 279
19.2.1 在IDE中調(diào)試代碼 279
19.2.2 在瀏覽器中調(diào)試代碼 280
第 20章 引入擴展工具 282
20.1 引入靜態(tài)檢查工具 ESLint 282
20.1.1 ESLint的安裝與 應(yīng)用 282
20.1.2 配置檢查規(guī)則 284
20.2 引入單元測試工具Jest 285
20.2.1 Jest的安裝與 配置 285
20.2.2 編寫和執(zhí)行單元測試 286
第四部分 項目應(yīng)用
第 21章 在TypeScript項目中使用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 使用自帶聲明文件的第三方庫 296
21.2.2 使用DefinitelyTyped聲明文件庫 297
21.2.3 自行編寫聲明模塊 297
21.3 將項目從JavaScript遷移到TypeScript中 299
第 22章 使用TypeScript開發(fā)后端項目 300
22.1 后端開發(fā)簡介 301
22.1.1 常用的后端框架 301
22.1.2 Express框架的用法 301
22.2 實戰(zhàn)項目案例:編寫任務(wù)管理系統(tǒng)后端API 304
22.2.1 編寫任務(wù)類型聲明并實現(xiàn) 任務(wù)數(shù)據(jù)訪問功能 304
22.2.2 編寫任務(wù)管理后端 服務(wù)API 306
第 23章 使用TypeScript開發(fā)前端項目 309
23.1 前端開發(fā)簡介 309
23.1.1 常用的前端框架 309
23.1.2 React框架的用法 310
23.2 實戰(zhàn)項目案例:編寫任務(wù)管理系統(tǒng)的前端界面 311
23.2.1 編寫任務(wù)類型聲明及任務(wù)管理后端API 312
23.2.2 編寫添加任務(wù)UI組件及任務(wù)列表項UI組件 313
23.2.3 編寫任務(wù)管理頁面及樣式 315