微軟提議對 JavaScript 進行重大修改:將新增型別標註(Type Annotations)

MissD發表於2022-03-17

近日,微軟宣佈了一個雄心勃勃的專案 —— 正在支援併合作一項初始“階段 0 ”的提案:將可選的 Type Annotations(型別標註)新增到官方 JavaScript 標準 ECMAScript 裡面。

據微軟官方資訊顯示:“該提議旨在使開發人員能夠向 JavaScript 程式碼中新增型別標註,允許 JavaScript 外部的型別檢查器檢查這些註釋,且在執行時,JavaScript 引擎會忽略它們,將型別視為標註。”

以上提議的目的是讓開發者能夠在不進行任何編譯的情況下就能執行用 TypeScript、Flow 及其他靜態型別的 JavaScript “超集”編寫的程式(如果它們停留在語言的某個相當大的子集內的話)。

3 月 9 日,在 TypeScript 高階專案經理、微軟 Daniel Rosenwasser 撰寫的一篇部落格文章中,對以上提案進行了全面解釋。如果該提案繼續往前推進的話,可能需要數年時間。

博文中解釋稱,此次提案與最近的趨勢有關,即更快的 JavaScript 迭代、更少的構建步驟,這些趨勢都正在使 JavaScript 編碼變得更快、更簡單。同時,這一趨勢也得到了現代 evergreen 瀏覽器的推動,這些瀏覽器通常不再要求開發人員編譯新版本的 JavaScript,以便在較舊的執行時上執行。

正如前面的建議所指出的,本次提案中語法的作用類似於註釋,因此不會影響周圍程式碼的執行方式。這一點在上面 Daniel Rosenwasser 的博文中也有所解釋:

“這個提議的想法是,JavaScript 可以為引擎完全忽略的型別建立一組語法,但 TypeScript、Flow 等工具可以使用這些語法”,“這使我們能夠保留開發者喜歡的 TypeScript 的東西——它的型別檢查和編輯體驗,同時消除開發中構建步驟的需要。”

在此次新方案中,當涉及到編寫和執行程式碼時,開發人員的內部迴圈如下圖所示:

由於 JavaScript 的 type syntax 之前就已經出現過,且開發人員對任何此類功能的工作方式都有許多不同的看法,因此許多細節還沒有具體化。

對此,Daniel Rosenwasser 補充稱,至少需要為以下內容新增語法:

  • 變數和函式的型別註釋
  • (可選)modifiers(?)引數和類成員
  • 型別宣告(介面和型別別名)
  • 型別斷言運算子(as和!)

儘管可見性 modifiers 等其他構造(如 public、private 和 protected)也可能在範圍內,但 enums、 namespaces 及 parameter properties 等其他構造並不在範圍內,因為它們具有可觀察的執行時行為。

Daniel Rosenwasser 表示,“這些功能可以根據反饋作為單獨的 ECMAScript 功能提出,但我們目前的目標是支援 TypeScript 的一些大子集,我們認為這些子集可能是 JavaScript 的一個有價值的補充。”

據悉,該提案將在即將於 2022 年 3 月召開的 TC39(“指定 JavaScript”)全體會議上提出。

TC39 是由 JavaScript 開發人員、實現人員、學者及相關人士共同組成的委員會,他們與社群合作維護和發展 JavaScript 的定義,希望從“第 0 階段”跳到“第 1 階段”。

Rosenwasser 強調稱:“達到第 1 階段意味著標準委員會認為支援 type syntax 對於 ECMAScript 是值得考慮的”。“這並非一件肯定會引起轟動的事情,委員會內部有許多有價值的觀點,我們確實希望會有一些懷疑。像這樣的提案會得到很多反饋和適當的審查,所以它可能會涉及很多設計變更,可能需要數年才能產生結果。”

“但如果我們完成這一切,我們就有機會對 JavaScript 世界做出最有影響力的改進之一。我們對此感到興奮,希望你們也感到興奮。”

相關文章