微軟日前提出了一項新的提案,在提案中希望可以為 JavaScript 帶來可選的型別語法,該提案可能會使 JavaScript 原生自帶 TypeScript 的一些特性,使 TypeScript 語言更快、更容易使用。
具體而言,該提案要求將型別標註(Type Annotations)新增到 JavaScript 程式碼中,允許型別標註被外部型別檢查器檢查。在執行時,JavaScript 引擎會忽略這些標註並將這些型別視為註釋。該提案要求 JavaScript 為型別劃出一套語法,JavaScript 引擎將忽略這些語法,但 TypeScript、Flow 等工具可以使用。這項建議將為 ECMAScript 增加可選的型別語法。
該提案的目的是讓開發者能夠執行用 TypeScript、Flow 或其他靜態型別的 JavaScript 超集所編寫的程式,而不需要轉譯。微軟在公告中表示,新的語法將有效地起到註釋作用,而不會改變程式碼的執行方式。
微軟在提案中還表示,在過去十年中,靜態型別檢查的案例已經被證明相當成功。對 JavaScript 的大量投資(如微軟 TypeScript、Google Closure Compiler 和 Facebook Flow)為在 JavaScript 中宣告和使用型別提供了方便的語法,並獲得了在其他靜態型別語言中所看到的生產力的提高。它們的語法大多不會影響執行時的語意,實際上將這些變體轉換為普通的 JavaScript 的大部分工作都是在刪除型別。
此外在 2020 和 2021 年的 JS 調查中,靜態型別也一直是 JavaScript 開發者強烈要求的一個功能。
型別語法在 JavaScript 中的興起與下層編譯(或稱轉譯)的興起相吻合。因為型別語法在 JavaScript 中沒有得到原生支援,所以必須有一個工具能夠在執行程式碼之前刪除這些型別。對於像 TypeScript 和 Flow 這樣的型別系統來說,將型別清除步驟與語法降級相結合是有意義的,這樣使用者就不需要執行單獨的工具。
這個提案將減少對構建步驟的需求,使一些開發設定變得更加簡單,使用者將可以更加簡單地執行他們編寫的程式碼。
微軟在提案中並沒要求將 TypeScript 的型別檢查放在每個瀏覽器和 JavaScript 執行時中,也沒要求在瀏覽器中放置一個新的型別檢查器。微軟認為這將給 JavaScript 和 TypeScript 使用者帶來執行時的效能和相容性問題,也有可能阻止創新。目前該提案還處於 Stage 0 階段,更多提案內容可檢視微軟。