15個Typescript 5.0 中重要的新功能快速了解一下
作為一種在開發人員中越來越受歡迎的編程語言,TypeScript 不斷發展,帶來了大量的改進和新功能。在本文中,我們將深入研究 TypeScript 的最新迭代版本 5.0,并探索其最值得注意的更新。
1.裝飾器
TypeScript 5.0 引入了改進的裝飾器系統,改進了類型檢查和元數據生成。 裝飾器現在可以更無縫地與類型系統一起工作,使您能夠編寫更清晰、更健壯的代碼。下面是方法裝飾器如何工作的一個簡單示例:
在此示例中,@log 裝飾器會在每次調用方法時記錄方法名稱。除了方法裝飾器,TypeScript 5.0 還支持自動訪問器裝飾器、Getter 和 Setter 裝飾器等。
2. const 類型參數
在 TypeScript 5.0 之前,其推理通常會選擇更通用的類型,例如 將 ["Alice", "Bob", "Eve"] 推斷為 string[],如果您想要更具體的類型,則必須為其添加 as const:
TypeScript 5.0 允許您將 const 修飾符添加到類型參數聲明中:
但請記住,const 修飾符僅影響在調用中編寫的對象、數組和原始表達式的推斷,因此不會(或不能)用 as const 修改的參數將看不到任何 行為改變:
3. extends支持多配置文件
TypeScript 5.0 帶來了在 tsconfig.json 中擴展多個配置文件的能力。此功能使跨項目共享和管理配置變得更加容易。以下是如何使用多個配置文件的示例:
在此示例中,配置文件擴展了基本配置和玩笑配置,允許您根據需要組合和覆蓋設置。
4. 所有枚舉都是聯合枚舉
在 TypeScript 5.0 中,所有枚舉現在都被視為聯合枚舉。 聯合枚舉為使用枚舉值提供了更好的類型安全性和改進的人體工程學。 這是一個例子:
TypeScript 5.0 通過為每個計算成員創建唯一類型,設法將所有枚舉變成聯合枚舉。這意味著現在可以縮小所有枚舉的范圍,并將其成員也作為類型引用。
5. — moduleResolution 捆綁器
TypeScript 5.0 引入了一種新的模塊解析策略,稱為 bundler。此策略旨在與 Webpack 和 Rollup 等捆綁器一起使用,從而實現更高效和簡化的構建過程(就像過去 Node.js 模塊中的任何相關導入一樣,需要包含文件擴展名)。
要啟用 bundler 模塊解析策略,請在 tsconfig.json 中使用以下配置:
6.自定義分辨率標志
TypeScript 5.0 添加了幾個新標志來自定義模塊解析過程。這些標志對如何解析模塊提供了更精細的控制,使您可以微調構建過程。
以下是簡要概述:
- --allowImportingTsExtensions:允許導入帶有 TypeScript 特定擴展名的 TypeScript 文件,例如 .ts、.mts 或 .tsx。
- --resolvePackageJsonExports:強制 TypeScript 在從 node_modules 中讀取包時查詢 package.json 文件的導出字段。
- --resolvePackageJsonImports:強制 TypeScript 在執行以 # 開頭的查找時查詢 package.json 文件的導入字段。
- --allowArbitraryExtensions:允許通過查找 {file basename}.d.{extension}.ts 形式的聲明文件來導入具有未知擴展名的文件。
- --customConditions:獲取當 TypeScript 從 package.json 的導出或導入字段解析時要考慮的附加條件列表。
7. — verbatimModuleSyntax
TypeScript 5.0 中新的 --verbatimModuleSyntax 標志允許您在發出 JavaScript 代碼時保留原始模塊語法。 此功能在使用捆綁器時特別有用,因為它不需要額外的轉換。例如:
要啟用此標志,請將其添加到您的 tsconfig.json 中:
8.支持 export type*
TypeScript 5.0 引入了對 export type * 語法的支持,它允許您從另一個模塊重新導出所有類型。
此語法對于創建僅類型模塊或聚合來自多個來源的類型特別有用。
這是一個例子:
在此示例中,使用 export type * 語法將 types.ts 模塊中的所有類型重新導出到 index.ts 模塊中。
9. JSDoc 中的@satisfies 支持
TypeScript 5.0 中新的@satisfies JSDoc 標記使您能夠指定函數實現滿足特定接口。 在使用結構類型或使用 TypeScript 對 JavaScript 代碼進行類型檢查時,此功能特別有用。
這是一個例子:
在這個例子中,greeter 函數被標記為@satisfies JSDoc 標簽,表明它滿足 Greeter 接口。
10. JSDoc 中的@overload 支持
TypeScript 5.0 添加了對 @overload JSDoc 標記的支持,允許您在 JavaScript 代碼中為單個實現定義多個函數簽名。
在處理需要支持多種參數類型或形狀的復雜函數時,此功能特別有用。
這是一個例子:
在此示例中,add 函數標有兩個 @overload JSDoc 標記,指定它可以處理數字和字符串作為參數。
11. 在 — build 下傳遞特定于發射的標志
TypeScript 5.0 引入了在使用 --build 標志時傳遞 emit-specific 標志的能力。此功能允許您在構建項目時微調項目的輸出,從而更好地控制構建過程。部分消息:
- --declaration:從項目中的 TypeScript 和 JavaScript 文件生成 .d.ts 文件。
- --emitDeclarationOnly:只輸出 d.ts 文件,不輸出 JavaScript 文件。
- --declarationMap:為 d.ts 文件創建 sourcemaps。
- --sourceMap:為發出的 JavaScript 文件創建源映射文件。
- --inlineSourceMap:在發出的 JavaScript 中包含源映射文件。
12. 編輯器中不區分大小寫的導入排序
TypeScript 5.0 通過不區分大小寫改進了編輯器中的導入排序。在組織導入時,此更改會導致更自然和直觀的排序順序,從而使代碼更清晰、更易讀。
13. 詳盡的開關/外殼完成
TypeScript 5.0 通過提供詳盡的 switch/case 補全增強了代碼補全體驗。 在處理聯合類型時,編輯器現在可以建議所有可能的情況,減少遺漏情況的機會,并使編寫全面的 switch 語句變得更加容易。 這是一個例子:
14. 速度、內存和包大小優化
TypeScript 5.0 帶來了各種性能優化,包括更快的類型檢查、更少的內存使用和更小的包大小。這些改進使使用 TypeScript 變得更加愉快,確保了流暢高效的開發體驗。
15.重大變更和棄用
與任何主要版本一樣,TypeScript 5.0 引入了一些重大更改和棄用。 在升級之前查看發行說明并徹底測試您的項目至關重要。
一些顯著的重大變化包括:
- 運行時要求:TypeScript 現在以 ECMAScript 2018 為目標。TypeScript 包還設置了最低預期引擎 12.20。對于 Node 用戶,這意味著 TypeScript 5.0 的最低版本要求至少為 Node.js 12.20 及更高版本。
- lib.d.ts 更改:更改 DOM 類型的生成方式可能會對現有代碼產生影響。值得注意的是,某些屬性已從數字轉換為數字文字類型,并且用于剪切、復制和粘貼事件處理的屬性和方法已跨接口移動。
- API 重大更改:移至模塊,刪除了一些不必要的接口并進行了一些正確性改進。
- 關系運算符中禁止的隱式強制轉換:
- Enum Overhaul:在 TypeScript 5.0 中你不會看到那些奇怪的 enum 問題,這里有兩個重要的錯誤改進:
對構造函數中的參數裝飾器進行更準確的類型檢查 — experimentalDecorators
一些已棄用的配置和配置值。
結論
總之,TypeScript 5.0 帶來了許多新功能,那么,您覺得哪個功能最有用?