最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

原生JS以后也支持類(lèi)型注解意義

 更新時(shí)間:2022年07月12日 09:54:46   作者:卡頌  
這篇文章主要為大家介紹了原生JS以后也支持類(lèi)型注解意義,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

引言

在布達(dá)佩斯2022 JSConf會(huì)議上,tc39(ES標(biāo)準(zhǔn)委員會(huì))成員Gil Tayar介紹了一份當(dāng)前仍處于stage 1階段的提案 —— Type Annotations,意在讓原生JS支持類(lèi)型注解。

換句話說(shuō),如果提案通過(guò),很多.ts文件將后綴改為.js后就能直接在瀏覽器中運(yùn)行。

一份tc39提案通常會(huì)經(jīng)歷5個(gè)階段:

  • stage 0:被提出
  • stage 1:接受審議
  • stage 2:規(guī)范基本完成
  • stage 3:等待被實(shí)現(xiàn)
  • stage 4:納入語(yǔ)言標(biāo)準(zhǔn)中

所以Type Annotations當(dāng)前仍處于接受審議的狀態(tài)。

但是提案發(fā)起者Gil Tayar對(duì)這份提案的通過(guò)很有信心,本文我們來(lái)聊聊這份提案的相關(guān)內(nèi)容。

為什么需要原生類(lèi)型注解?

根據(jù)20年、21年state of JS的統(tǒng)計(jì),靜態(tài)類(lèi)型高票當(dāng)選JS中當(dāng)前最欠缺的功能。

同時(shí),在Github報(bào)告中,TS被列為第四大最常用的語(yǔ)言

所以,對(duì)前端工程師來(lái)說(shuō),類(lèi)型注解需求很大。

那么,既然已經(jīng)有了TS,為什么還需要原生JS支持類(lèi)型注解呢?

通常來(lái)說(shuō),從開(kāi)發(fā)者編寫(xiě)的源代碼線上生產(chǎn)環(huán)境代碼間需要經(jīng)過(guò)代碼編譯。

代碼編譯主要包括兩個(gè)步驟:

  • 降級(jí)編譯(包括高級(jí)語(yǔ)法轉(zhuǎn)換為低級(jí)語(yǔ)法,高級(jí)方法的polyfill
  • 代碼轉(zhuǎn)譯(比如壓縮、混淆、tree-shaking、類(lèi)型擦除)

所謂類(lèi)型擦除,是指擦除代碼中的類(lèi)型注解,讓其變成符合原生JS規(guī)范的代碼,比如:

// 擦除前
function add(a: number, b: number): number {
  return a + b;
}
// 擦除后
function add(a, b) {
  return a + b;
}

隨著時(shí)間的推移,各主流瀏覽器兼容性越來(lái)越好,步驟1在可預(yù)見(jiàn)的未來(lái)重要性會(huì)逐漸降低。

對(duì)于TS開(kāi)發(fā)者,從源代碼線上生產(chǎn)環(huán)境代碼間可能只需要類(lèi)型擦除。

如果原生JS支持類(lèi)型注解,就能省去類(lèi)型擦除對(duì)應(yīng)的編譯流程,讓代碼更容易在宿主環(huán)境執(zhí)行。

和TS的關(guān)系

這份提案的目的,并不是另起爐灶,獨(dú)立實(shí)現(xiàn)一套原生JS的類(lèi)型注解。而是與TS團(tuán)隊(duì)合作,提出一套合適的規(guī)范。

新的規(guī)范與TS規(guī)范的關(guān)系類(lèi)似下圖:

一方面,Type Annotations提案從TS中借鑒了很多特性,這就是圖中相交的部分。

你可以到grammar-conventions看到規(guī)范當(dāng)前定義的類(lèi)型

另一方面,TS迭代速度很快,新的特性產(chǎn)出很快。而Type Annotations作為JS語(yǔ)言的一部分,迭代會(huì)更加保守,所以TS中一些特性在Type Annotations中并不支持。

此外,TS中一些結(jié)構(gòu)(比如Enums、Namespaces)存在運(yùn)行時(shí)的語(yǔ)義,Type Annotations也不會(huì)支持。

這些就是TS中存在,而Type Annotations中不存在的部分。

最后,Type Annotations設(shè)計(jì)的初衷并不是與TS強(qiáng)綁定,而僅僅是提供一套類(lèi)型規(guī)范,開(kāi)發(fā)者編寫(xiě)代碼時(shí)的類(lèi)型檢查還是由各種類(lèi)型檢查器(比如TS、Flow)實(shí)現(xiàn)。

所以,Type Annotations還有一部分特性是TS當(dāng)前未定義的,這也是為了規(guī)范更廣泛的適用性考慮的,也就是圖中Type Annotations存在,而TS不存在的部分。

這部分特性需要TS后續(xù)實(shí)現(xiàn),這也是為什么Type Annotations要與TS團(tuán)隊(duì)合作的一大原因。

對(duì)開(kāi)發(fā)者意味著什么

如果Type Annotations最終出現(xiàn)在ES20xx版中,屆時(shí)開(kāi)發(fā)者編寫(xiě)代碼的步驟是:

  • 選擇合適的類(lèi)型檢查器(比如TS),這個(gè)類(lèi)型檢查器需要完全遵循Type Annotations規(guī)范(而不是自己的規(guī)范,比如TS規(guī)范)
  • 編寫(xiě)帶類(lèi)型聲明的原生JS代碼
  • 類(lèi)型檢查器會(huì)檢查類(lèi)型錯(cuò)誤,并給予報(bào)錯(cuò)或提示

對(duì)于如下原生JS代碼,如果開(kāi)發(fā)者傳入了錯(cuò)誤的類(lèi)型,JS會(huì)報(bào)錯(cuò)么?

function add(a: number, b: number): number {
  return a + b;
}
// 錯(cuò)誤的類(lèi)型傳參
add('KaSong', 123);

答案是:不會(huì)。

Type Annotations僅僅是一套規(guī)范,該規(guī)范由各種類(lèi)型檢查器執(zhí)行。

JS的宿主環(huán)境(比如瀏覽器)在執(zhí)行帶類(lèi)型聲明的JS代碼時(shí),會(huì)忽略類(lèi)型聲明。

總結(jié)

有同學(xué)可能會(huì)問(wèn):就為了減少編譯時(shí)類(lèi)型擦除這一步,就提出原生類(lèi)型規(guī)范,有必要么?

甚至當(dāng)Type Annotations落地后,開(kāi)發(fā)者上線前在進(jìn)行代碼壓縮時(shí),類(lèi)型擦除也會(huì)作為代碼壓縮的職責(zé)之一。

從這個(gè)角度看,甚至沒(méi)有減少編譯時(shí)的工作量。

所以提出原生的類(lèi)型規(guī)范,有必要么?

前端的發(fā)展實(shí)際是一個(gè)努力去編譯時(shí)流程的過(guò)程。

比如,編譯時(shí)代碼需要降級(jí),需要polyfill?隨著IE11停止服務(wù),主流瀏覽器紛紛跟進(jìn)標(biāo)準(zhǔn)落地,降級(jí)與polyfill的需求逐漸變少。

再比如,代碼需要打包?隨著ESM規(guī)范落地,在當(dāng)前,至少在開(kāi)發(fā)環(huán)境中代碼已經(jīng)不需要打包(使用Vite)。

Type Annotations的出現(xiàn),就是遵循努力去編譯時(shí)流程這一趨勢(shì)的產(chǎn)物。

從這個(gè)角度看,還是很有必要的。

以上就是原生JS以后也支持類(lèi)型注解意義的詳細(xì)內(nèi)容,更多關(guān)于原生JS支持類(lèi)型注解的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 微信小程序canvas寫(xiě)字板效果及實(shí)例

    微信小程序canvas寫(xiě)字板效果及實(shí)例

    這篇文章主要介紹了微信小程序canvas寫(xiě)字板效果及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 微信小程序 繪圖之餅圖實(shí)現(xiàn)

    微信小程序 繪圖之餅圖實(shí)現(xiàn)

    這篇文章主要介紹了微信小程序 繪圖之餅圖實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • Typescript?封裝?Axios攔截器方法實(shí)例

    Typescript?封裝?Axios攔截器方法實(shí)例

    這篇文章主要為大家介紹了Typescript?封裝?Axios攔截器方法實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 打包非 JavaScript 靜態(tài)資源詳情

    打包非 JavaScript 靜態(tài)資源詳情

    這篇文章主要介紹了打包非 JavaScript 靜態(tài)資源,打包工具中的自定義導(dǎo)入,種常見(jiàn)的方法是利用已有的靜態(tài)導(dǎo)入語(yǔ)法。有些打包工具可能會(huì)通過(guò)文件擴(kuò)展名來(lái)自動(dòng)檢測(cè)格式,而有些其他打包工具則允許插件使用自定義的 URL Scheme,下面具體內(nèi)舉例說(shuō)明,需要的朋友可以參考一下
    2021-10-10
  • 關(guān)于JavaScript輪播圖的實(shí)現(xiàn)

    關(guān)于JavaScript輪播圖的實(shí)現(xiàn)

    這篇文章主要介紹了關(guān)于JavaScript輪播圖的實(shí)現(xiàn),下面文章主要是利用利用html 和 css 代碼實(shí)現(xiàn)輪播圖,詳細(xì)內(nèi)容請(qǐng)參考下面詳細(xì)內(nèi)容,希望對(duì)你有所幫助
    2021-11-11
  • 微信小程序 http請(qǐng)求的session管理

    微信小程序 http請(qǐng)求的session管理

    這篇文章主要介紹了微信小程序 http請(qǐng)求的session管理的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • JavaScript復(fù)原何同學(xué)B站頭圖細(xì)節(jié)示例詳解

    JavaScript復(fù)原何同學(xué)B站頭圖細(xì)節(jié)示例詳解

    這篇文章主要為大家介紹了JavaScript復(fù)原何同學(xué)B站頭圖細(xì)節(jié)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 微信小程序 實(shí)戰(zhàn)程序簡(jiǎn)易新聞的制作

    微信小程序 實(shí)戰(zhàn)程序簡(jiǎn)易新聞的制作

    這篇文章主要介紹了微信小程序 實(shí)戰(zhàn)程序簡(jiǎn)易新聞的制作的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • TypeScript基礎(chǔ)類(lèi)型介紹

    TypeScript基礎(chǔ)類(lèi)型介紹

    這篇文章主要介紹了TypeScript基礎(chǔ)類(lèi)型,布爾值、數(shù)字、字符串、任意類(lèi)型等多種類(lèi)型,下面我們就來(lái)看看這些類(lèi)型的詳細(xì)介紹,需要的朋友可以參考一下,希望對(duì)你有所幫助
    2021-12-12
  • 前端canvas中物體邊框和控制點(diǎn)的實(shí)現(xiàn)示例

    前端canvas中物體邊框和控制點(diǎn)的實(shí)現(xiàn)示例

    這篇文章主要為大家介紹了前端canvas中物體邊框和控制點(diǎn)的實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08

最新評(píng)論

诏安县| 福建省| 中牟县| 日喀则市| 鲁甸县| 固阳县| 德江县| 大同市| 沅陵县| 乌审旗| 门头沟区| 繁昌县| 陇南市| 平顺县| 安仁县| 沂南县| 湛江市| 宜城市| 宝坻区| 武宣县| 仁寿县| 凤山市| 军事| 武义县| 开阳县| 颍上县| 昂仁县| 安图县| 东宁县| 桐城市| 郎溪县| 墨脱县| 图们市| 乌兰察布市| 睢宁县| 长春市| 邛崃市| 福泉市| 余江县| 苏尼特左旗| 双鸭山市|