TypeScript 4.1發佈,新增模板字面量類型

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"TypeScript團隊發佈了"},{"type":"link","attrs":{"href":"https:\/\/devblogs.microsoft.com\/typescript\/announcing-typescript-4-1\/","title":null,"type":null},"content":[{"type":"text","text":"TypeScript 4.1"}]},{"type":"text","text":",其中包括功能強大的模板字面量類型、映射類型的鍵重映射以及遞歸條件類型。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"模板字面量類型在社區中得到了非常熱烈的響應。這個新特性提供了使用普通字符串字面量類型作爲其他類型定義的能力,這讓創建和執行模板語法變得很容易。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"模板字符串字面量也可以動態生成,並根據模板字符串中的替換位置進行推斷。爲了進一步支持模板字符串字面量,TypeScript還添加了新的實用類型別名來修改字母大小寫:Uppercase、Lowercase、Capitalize和Uncapitalize。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"社區提供了很多有趣的模板字符串文本示例,包括querySelector、路由器參數解析、表達式解析、JSON解析和序列化、GraphQL類型的AST、SQL查詢驗證、CSS解析、遊戲、"},{"type":"link","attrs":{"href":"https:\/\/github.com\/kkuchta\/TSpell","title":null,"type":null},"content":[{"type":"text","text":"拼寫檢查"}]},{"type":"text","text":",等等。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Haskell和PureScript也有類似的特性,現在TypeScript也支持它們了。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"TypeScript 4.1還通過添加鍵重映射對映射類型進行了改進。映射類型以前僅限於帶有已知建的新對象類型,現在支持創建新鍵或過濾已有的鍵。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"TypeScript 4.1的另一個重要新增功能是遞歸條件類型,可以更容易地支持數組或複雜promise樹的扁平化方法。條件類型現在可以立即在分支中引用自己,從而更容易創建遞歸類型別名。TypeScript團隊警告說,這個模式應該謹慎使用,避免遞歸類型檢查的速度變慢,而且如果超出了受支持的遞歸深度,TypeScript編譯器將會拋出編譯時錯誤。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"TypeScript 4.1添加了一個新的編譯器標誌--noUncheckedIndexedAccess,用來識別潛在未定義屬性。這個新特性不會自動包含在--strict標記中,因爲它在一些常見場景中會改變行爲,比如遍歷for循環的索引時。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"有兩個新的針對React 17用戶的JSX選項,可以更好地支持生產和開發編譯,分別是react-jsx和react-jsxdev。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在升級到TypeScript 4.1時,需要考慮以下幾個重大變更:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"內置的lib.d.ts自動生成DOM類型的行爲發生了變化,並移除了Reflect.enumerateAPI,因爲ES2016已將其棄用。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"類的abstract成員不再被標記爲async。調用者只關心返回類型,因此不再存在將abstract成員指定爲async的值。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"any和unknown類型現在會在錯誤的位置傳播。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"resolve的參數現在在promise中是必需的。TypeScript 4.1包含了一個快速修復,以簡化升級過程。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"條件擴展可創建可選屬性。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"不匹配的參數不再相關。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"TypeScript 4.2的相關工作已經在進行中,預計將於2021年2月完成。TypeScript 4.2的內容包括廣義索引簽名、元組類型中的前\/中剩餘元素、--noImplicitOverride、--noPropertyAccessFromIndexSignature、靜態索引簽名、typeof class、更快的編譯時迭代,以及編輯器和生產力方面的進一步改進。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"TypeScript採用了Apache 2開源許可,歡迎開發者通過"},{"type":"link","attrs":{"href":"https:\/\/github.com\/Microsoft\/TypeScript\/","title":null,"type":null},"content":[{"type":"text","text":"TypeScript GitHub項目"}]},{"type":"text","text":"參與貢獻和反饋,並遵循"},{"type":"link","attrs":{"href":"https:\/\/github.com\/Microsoft\/TypeScript\/blob\/master\/CONTRIBUTING.md","title":null,"type":null},"content":[{"type":"text","text":"TypeScript貢獻指南"}]},{"type":"text","text":"和"},{"type":"link","attrs":{"href":"https:\/\/opensource.microsoft.com\/codeofconduct\/","title":null,"type":null},"content":[{"type":"text","text":"微軟開源行爲準則"}]},{"type":"text","text":"。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"原文鏈接"},{"type":"text","text":":"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/www.infoq.com\/news\/2020\/12\/typescript-4-1-template-literal\/","title":null,"type":null},"content":[{"type":"text","text":"TypeScript 4.1 Adds Template Literal Types"}]}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章