第一章 認識TypeScript第1項:瞭解TypeScript與JavaScript之間的關係第2項:知道你正在使用哪些TypeScript設定選項第3項:認知程式碼生成與型態無關第4項:熟悉結構定型第5項:限制any型態的使用頻率第二章 TypeScript的型態系統第6項:使用編輯器來訊問和探索型態系統第7項:將型態想成值的集合第8項:知道如何判斷一個代號是在型態空間裡,還是值空間裡第9項:優先使用型態註記,而非型態斷言第10項:避免使用物件包裝型態(String、Number、Boolean、Symbol、BigInt)第11項:區分「額外屬性檢查」與「型態檢查」第12項:盡可能為整個函式表達式指定型態第13項:瞭解type和interface之間的差異第14項:使用readonly來避免就地修改造成的錯誤第15項:使用型態操作與泛型型態來避免重複第16項:優先考慮比索引簽章更精確的替代方案第17項:避免數值索引簽章第三章 型態推斷與控制流分析第18項:避免可推斷的型態使程式碼變得雜亂第19項:讓不同的型態使用不同的變數第20項:瞭解變數是怎麼獲得它的型態的第21項:一次建立物件第22項:瞭解型態窄化第23項:使用一致的別名第24項:瞭解背景資訊在型態推斷中的作用第25項:瞭解演變的型態第26項:使用泛函結構與程式庫來協助型態流動第27項:使用async函式來改善型態流動,而不是使用callback第28項:使用類別和柯里化來建立新推斷位置第四章 型態設計第29項:優先使用始終代表有效狀態的型態第30項:寬鬆地接收東西,嚴格地產生東西第31項:不要在註釋中重複敘述型態資訊第32項:避免在型態別名中加入null或undefined第33項:將null值推到型態外圍第34項:優先考慮多個介面的聯集,而不是包含聯集的介面第35項:盡量使用比字串型態更精確的型態第36項:為特殊值定義獨立的型態第37項:盡量避免使用「選用屬性」第38項:避免反覆使用型態相同的參數第39項:與其表達差異,不如統一型態第40項:寧可使用不精確的型態,也不使用不正確的型態第41項:用問題領域的語言來為型態命名第42項:避免根據片面資料建立型態第五章 不完善性與any型態第43項:將any型態限制在最小範圍內第44項:優先使用更精確的any版本,而不是一般的any第45項:將不安全的型態斷言隱藏在定義了良好型態的函式中第46項:讓型態不明的值使用unknown,而不是any第47項:優先考慮型態安全的做法,而不是Monkey Patching第48項:避免落入不完善陷阱第49項:追蹤型態覆蓋率,以防止再次失去型態安全性第六章 泛型與型態級設計第50 項:將泛型視為型態之間的函式第51 項:避免非必要的型態參數第52 項:優先考慮條件型態,而不是多載簽章第53 項:瞭解如何控制聯集型態在條件型態中的分佈第54 項:使用模板字面型態來表達DSL與字串之間的關係第55 項:為你的型態撰寫測試程式第56 項:注意型態的顯示方式第57 項:優先考慮尾遞迴泛型型態第58 項:考慮用程式碼生成來取代複雜型態第七章 TypeScript錦囊妙計第59項:使用never型態進行完整性檢查第60項:知道如何迭代物件第61項:使用Record型態來讓值保持同步第62項:使用rest參數與tuple型態來表達可變參數函式第63項:使用選用的never屬性來表達互斥或第64項:考慮使用烙印(brand)來實現名目定型第八章 型態宣告與@types第65項:將TypeScript與@types放入devDependencies中第66項:瞭解涉及型態宣告的三種版本第67項:將出現在公用API裡的所有型態匯出第68項:使用TSDoc來撰寫API註釋第69項:如果callback裡的this是API的一部分,那就提供它的型態第70項:以鏡像型態切斷依賴關係第71項:使用模組擴充來改善型態第九章 編寫與執行你的程式第72項:優先考慮ECMAScript的功能,而非TypeScript的功能第73項:使用source map來找出TypeScript的bug第74項:瞭解如何在執行期重建型態第75項:瞭解DOM階層架構第76項:為你的環境建立精確的模型第77項:瞭解型態檢查與單元測試之間的關係第78項:注意編譯器的效能第十章 現代化與遷移第79項:撰寫現代的JavaScript第80項:使用@ts-check與JSDoc來試驗TypeScript第81項:使用allowJs來混合TypeScript與JavaScript第82項:沿著依賴關係圖往上一一轉換模組第83項:在啟用noImplicitAny之前,不要認為遷移已經完成了附錄 第一版與第二版的項目之間的對應關係
TypeScript學習手冊 JavaScript設計模式學習手冊 第二版 單元測試的藝術|以 JavaScript 為例