<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在布達佩斯2022 JSConf會議上,tc39(ES標準委員會)成員Gil Tayar介紹了一份當前仍處於stage 1
階段的提案 —— Type Annotations
,意在讓原生JS
支援型別註解。
換句話說,如果提案通過,很多.ts
檔案將字尾改為.js
後就能直接在瀏覽器中執行。
一份tc39
提案通常會經歷5個階段:
所以Type Annotations
當前仍處於接受審議的狀態。
但是提案發起者Gil Tayar對這份提案的通過很有信心,本文我們來聊聊這份提案的相關內容。
根據20年、21年state of JS的統計,靜態型別高票當選JS中當前最欠缺的功能。
同時,在Github報告中,TS
被列為第四大最常用的語言
所以,對前端工程師來說,型別註解需求很大。
那麼,既然已經有了TS
,為什麼還需要原生JS
支援型別註解呢?
通常來說,從開發者編寫的原始碼到線上生產環境程式碼間需要經過程式碼編譯。
程式碼編譯主要包括兩個步驟:
polyfill
)所謂型別擦除,是指擦除程式碼中的型別註解,讓其變成符合原生JS
規範的程式碼,比如:
// 擦除前 function add(a: number, b: number): number { return a + b; } // 擦除後 function add(a, b) { return a + b; }
隨著時間的推移,各主流瀏覽器相容性越來越好,步驟1在可預見的未來重要性會逐漸降低。
對於TS
開發者,從原始碼到線上生產環境程式碼間可能只需要型別擦除。
如果原生JS
支援型別註解,就能省去型別擦除對應的編譯流程,讓程式碼更容易在宿主環境執行。
這份提案的目的,並不是另起爐灶,獨立實現一套原生JS
的型別註解。而是與TS團隊合作,提出一套合適的規範。
新的規範與TS規範的關係類似下圖:
一方面,Type Annotations
提案從TS
中借鑑了很多特性,這就是圖中相交的部分。
你可以到grammar-conventions看到規範當前定義的型別
另一方面,TS
迭代速度很快,新的特性產出很快。而Type Annotations
作為JS
語言的一部分,迭代會更加保守,所以TS
中一些特性在Type Annotations
中並不支援。
此外,TS
中一些結構(比如Enums
、Namespaces
)存在執行時的語意,Type Annotations
也不會支援。
這些就是TS
中存在,而Type Annotations
中不存在的部分。
最後,Type Annotations
設計的初衷並不是與TS
強繫結,而僅僅是提供一套型別規範,開發者編寫程式碼時的型別檢查還是由各種型別檢查器(比如TS
、Flow
)實現。
所以,Type Annotations
還有一部分特性是TS
當前未定義的,這也是為了規範更廣泛的適用性考慮的,也就是圖中Type Annotations
存在,而TS
不存在的部分。
這部分特性需要TS
後續實現,這也是為什麼Type Annotations
要與TS
團隊合作的一大原因。
如果Type Annotations
最終出現在ES20xx
版中,屆時開發者編寫程式碼的步驟是:
TS
),這個型別檢查器需要完全遵循Type Annotations
規範(而不是自己的規範,比如TS
規範)JS
程式碼對於如下原生JS
程式碼,如果開發者傳入了錯誤的型別,JS
會報錯麼?
function add(a: number, b: number): number { return a + b; } // 錯誤的型別傳參 add('KaSong', 123);
答案是:不會。
Type Annotations
僅僅是一套規範,該規範由各種型別檢查器執行。
JS
的宿主環境(比如瀏覽器)在執行帶型別宣告的JS程式碼時,會忽略型別宣告。
有同學可能會問:就為了減少編譯時型別擦除這一步,就提出原生型別規範,有必要麼?
甚至當Type Annotations
落地後,開發者上線前在進行程式碼壓縮時,型別擦除也會作為程式碼壓縮的職責之一。
從這個角度看,甚至沒有減少編譯時的工作量。
所以提出原生的型別規範,有必要麼?
前端的發展實際是一個努力去編譯時流程的過程。
比如,編譯時程式碼需要降級,需要polyfill
?隨著IE11
停止服務,主流瀏覽器紛紛跟進標準落地,降級與polyfill
的需求逐漸變少。
再比如,程式碼需要打包?隨著ESM
規範落地,在當前,至少在開發環境中程式碼已經不需要打包(使用Vite
)。
Type Annotations
的出現,就是遵循努力去編譯時流程這一趨勢的產物。
從這個角度看,還是很有必要的。
以上就是原生JS以後也支援型別註解意義的詳細內容,更多關於原生JS支援型別註解的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45