-
一、總體概述
- TypeScript 是 JavaScript 的超集,主要通過靜態類型檢查和豐富的類型系統來提高代碼的健壯性和可維護性。
- 它涵蓋了從基礎數據類型到高級類型、從函數與對象的類型定義到類、接口、泛型、模塊化及裝飾器等眾多知識點。
- 掌握這些內容有助于編寫更清晰、結構更合理、錯誤更少的代碼。
-
二、詳細知識點總結
-
(一)基礎數據類型
- (1) 原始類型
- 包括 number、string、boolean、null、undefined、symbol、bigint。
- (2) 對象類型
- 對象、數組、元組、函數等都是引用類型。
- (1) 原始類型
-
(二)函數與作用域
- (1) 函數定義
- 可使用函數聲明、函數表達式或箭頭函數。
- 支持可選參數、默認參數以及剩余參數。
- (2) 返回值類型
- 可通過 void 標注無返回值函數,使用 never 表示永遠不會返回(如拋異常或無限循環)。
- (1) 函數定義
-
(三)接口 (interface)
- (1) 對象類型定義
- 用于聲明對象屬性及其類型,提升代碼重用性和可讀性。
- (2) 函數與數組類型控制
- 可約束函數的參數和返回值,也可用于定義數組索引類型。
- (3) 屬性修飾
- 支持可選屬性(?)和只讀屬性(readonly)。
- (4) 繼承
- 通過 extends 實現單繼承或多繼承,擴展已有接口。
- (1) 對象類型定義
-
(四)類 (Class)
- (1) 基本概念
- 包括構造函數、實例屬性與方法。
- (2) 訪問修飾符
- public(公有)、private(私有)、protected(受保護),控制成員的可見性。
- (3) 靜態成員與抽象類
- 靜態屬性與方法屬于類本身,抽象類用于定義抽象方法供子類實現。
- (1) 基本概念
-
(五)泛型 (Generics)
- (1) 泛型函數
- 使函數參數和返回值具有靈活的類型。
- (2) 泛型接口與類
- 用于在接口或類中引入類型參數,增強復用性。
- (3) 泛型約束
- 限制泛型類型必須滿足某些條件(如具有某些屬性)。
- (1) 泛型函數
-
(六)枚舉 (Enums)
- (1) 數字枚舉
- 默認從 0 開始,每個枚舉成員自動遞增,可進行反向映射。
- (2) 字符串枚舉
- 枚舉成員為字符串常量,具有更好的語義。
- (1) 數字枚舉
-
(七)高級類型
- (1) 聯合類型與交叉類型
- 聯合類型使用 “|” 限制變量取值為多個類型中的一種;交叉類型 “&” 則用于組合多個類型的特性。
- (2) 字面量類型
- 限制變量只能取具體的字面量值,常與聯合類型一起使用。
- (3) 類型別名 (type alias)
- 用于給復雜類型或聯合類型取別名,便于復用和維護。
- (4) interface 與 type 的區別
- 接口側重于描述對象結構,支持聲明合并;類型別名適用于任何類型,但不支持合并。
- (1) 聯合類型與交叉類型
-
(八)類型推斷與類型兼容
- (1) 類型推斷
- 編譯器根據變量賦值自動推斷類型,簡化代碼書寫。
- (2) 類型兼容性
- 不同類型之間的兼容判斷,決定了賦值、參數傳遞時的類型匹配。
- (1) 類型推斷
-
(九)類型保護
- (1) 內置類型保護
- 使用 typeof、instanceof、in 等操作符判斷類型。
- (2) 用戶自定義類型保護
- 利用返回類型為 x is T 的函數,實現自定義的類型保護邏輯。
- (1) 內置類型保護
-
(十)裝飾器 (Decorators)
- (1) 裝飾器概念
- 通過 @ 符號為類、方法、屬性、參數添加元數據或行為,常用于框架中。
- (2) 使用條件
- 需要開啟 experimentalDecorators 編譯選項。
- (1) 裝飾器概念
-
(十一)模塊系統與命名空間
- (1) 模塊化
- 支持 ES6 模塊(import/export)和 CommonJS 模塊,實現代碼分離。
- (2) 命名空間
- 用于組織代碼內部模塊,避免全局污染。
- (1) 模塊化
-
(十二)工具類型
- (1) 常見工具類型包括:
- Partial:將所有屬性設為可選。
- Readonly:將所有屬性設為只讀。
- Record:構造鍵值對類型。
- Pick 與 Omit:從類型中挑選或剔除某些屬性。
- 其他如 Exclude、Extract、NonNullable、ReturnType、InstanceType 等。
- (1) 常見工具類型包括:
-
(十三)其他關鍵概念
- (1) any 與 unknown
- any 類型允許任意賦值,缺乏類型保護;unknown 類型更安全,需經過類型斷言或檢查后才能使用。
- (2) 類型斷言
- 使用 as 或尖括號語法,將一個值指定為某一具體類型,提升類型判斷準確性。
- (1) any 與 unknown
-
-
三、總體回顧
- TypeScript 的核心在于利用靜態類型系統提前捕獲錯誤,通過豐富的類型系統(包括基礎類型、高級類型、接口、類、泛型等)以及工具類型來構造靈活且健壯的代碼結構。
- 掌握這些知識點不僅可以提高代碼質量,還能在大型項目中更好地管理和維護代碼。
- 通過不斷實踐和總結,理解每個知識點的用途和最佳實踐,將有助于編寫出既安全又高效的 TypeScript 應用。