欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

TypeScript類型檢查詳談及火爆原因

 更新時(shí)間:2022年05月17日 09:19:29   作者:小生方勤  
這篇文章主要為大家介紹了TypeScript類型檢查以及火爆原因,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

TypeScript 這些年越來越火,可以說是前端工程師的必備技能了,各大框架都基于它實(shí)現(xiàn)。

那么,TypeScript 的出現(xiàn)和爆火是偶然發(fā)生的嗎?其實(shí)不是,類似 TypeScript 這種靜態(tài)類型語言成為主流是必然會(huì)發(fā)生的。為什么這么說呢?

讓我們先思考一個(gè)問題:類型是什么?

類型具體點(diǎn)來說就是指 number、boolean、string 等基礎(chǔ)類型和 Object、Function 等復(fù)合類型,它們是編程語言提供的對(duì)不同內(nèi)容的抽象:

不同類型變量占據(jù)的內(nèi)存大小不同:boolean 類型的變量只會(huì)分配 1 個(gè)字節(jié)的內(nèi)存,而 number 類型的變量則會(huì)分配 8 個(gè)字節(jié)的內(nèi)存,給變量聲明了不同的類型就代表了會(huì)占據(jù)不同的內(nèi)存空間。

不同類型變量可做的操作不同:number 類型可以做加減乘除等運(yùn)算,boolean 就不可以,復(fù)合類型中不同類型的對(duì)象可用的方法不同,比如 Date 和 RegExp,變量的類型不同代表可以對(duì)該變量做的操作就不同。

我們知道了什么是類型,那自然可以想到類型和所做的操作要匹配才行,這就是為什么要做類型檢查。

如果能保證對(duì)某種類型只做該類型允許的操作,這就叫做類型安全**。比如你對(duì) boolean 做加減乘除,這就是類型不安全,你對(duì) Date 對(duì)象調(diào)用 exec 方法,這就是類型不安全。反之,就是類型安全。

所以,類型檢查是為了保證類型安全的。

類型檢查可以在運(yùn)行時(shí)做,也可以運(yùn)行之前的編譯期做。這是兩種不同的類型,前者叫做動(dòng)態(tài)類型檢查,后者叫做靜態(tài)類型檢查。兩種類型檢查各有優(yōu)缺點(diǎn)。

動(dòng)態(tài)類型檢查

在源碼中不保留類型信息,對(duì)某個(gè)變量賦什么值、做什么操作都是允許的,寫代碼很靈活。但這也埋下了類型不安全的隱患,比如對(duì) string 做了乘除,對(duì) Date 對(duì)象調(diào)用了 exec 方法,這些都是運(yùn)行時(shí)才能檢查出來的錯(cuò)誤。

其中,最常見的錯(cuò)誤應(yīng)該是

“null is not an object”、“undefined is not a function”

之類的了,寫代碼時(shí)沒發(fā)現(xiàn)類型不匹配,到了運(yùn)行的時(shí)候才發(fā)現(xiàn),就會(huì)有很多這種報(bào)錯(cuò)。

所以,動(dòng)態(tài)類型雖然代碼寫起來簡(jiǎn)單,但代碼中很容易藏著一些類型不匹配的隱患。

靜態(tài)類型檢查

則是在源碼中保留類型信息,聲明變量要指定類型,對(duì)變量做的操作要和類型匹配,會(huì)有專門的編譯器在編譯期間做檢查。

靜態(tài)類型給寫代碼增加了一些難度,因?yàn)槟愠艘紤]代碼要表達(dá)的邏輯之外,還要考慮類型邏輯:變量是什么類型的、是不是匹配、要不要做類型轉(zhuǎn)換等。

不過,靜態(tài)類型也消除了類型不安全的隱患,因?yàn)樵诰幾g期間就做了類型檢查,就不會(huì)出現(xiàn)對(duì) string 做了乘除,調(diào)用了 Date 的 exec 方法這類問題。

所以,靜態(tài)類型雖然代碼寫起來要考慮的問題多一些,會(huì)復(fù)雜一些,但是卻消除了代碼中潛藏類型不安全問題的可能。

知道了動(dòng)態(tài)類型檢查和靜態(tài)類型檢查的區(qū)別,我們自然可以得出這樣的結(jié)論:

動(dòng)態(tài)類型只適合簡(jiǎn)單的場(chǎng)景,對(duì)于大項(xiàng)目卻不太合適,因?yàn)榇a中可能藏著的隱患太多了,萬一線上報(bào)一個(gè)類型不匹配的錯(cuò)誤,那可能就是大問題。

而靜態(tài)類型雖然會(huì)增加寫代碼的成本,但是卻能更好的保證代碼的健壯性,減少 Bug 率。

所以,大型項(xiàng)目注定會(huì)用靜態(tài)類型語言開發(fā)。

JavaScript 本來是為了瀏覽器的表單驗(yàn)證而設(shè)計(jì)的,所以就設(shè)計(jì)成了動(dòng)態(tài)類型的,寫代碼比較簡(jiǎn)單。

但 JavaScript 也沒想到它后來會(huì)被用來開發(fā)各種項(xiàng)目,比如 PC 和移動(dòng)端的網(wǎng)頁、React Native 跨端 App、小程序、Electron 桌面端、Node.js 服務(wù)端、Node.js 工具鏈等。

開發(fā)各種大型項(xiàng)目的時(shí)候,JavaScript 的動(dòng)態(tài)類型語言的缺點(diǎn)就暴露出來了,bug 率太高了,健壯性很難保證。那自然就有了對(duì)靜態(tài)類型的強(qiáng)烈需求,于是 TypeScript 應(yīng)運(yùn)而生。

TypeScript 給 JavaScript 添加了一套靜態(tài)類型系統(tǒng),從動(dòng)態(tài)類型語言變成了靜態(tài)類型語言,可以在編譯期間做類型檢查,提前發(fā)現(xiàn)一些類型安全問題。

而且,因?yàn)榇a中添加了靜態(tài)類型,也就可以配合編輯器來實(shí)現(xiàn)更好的提示、重構(gòu)等,這是額外的好處。

所以,TypeScript 的火爆是一個(gè)偶然么?不,我覺得是必然,因?yàn)榇笮晚?xiàng)目注定會(huì)用靜態(tài)類型語言來開發(fā)。

總結(jié)

類型決定了變量的內(nèi)存大小和可以對(duì)它進(jìn)行的操作,保證對(duì)什么類型只做什么操作就叫做類型安全,而保證類型安全的方式就是類型檢查。

類型檢查可以在運(yùn)行時(shí)做,叫做動(dòng)態(tài)類型檢查,也可以在編譯時(shí)做,叫做靜態(tài)類型檢查。

動(dòng)態(tài)類型可能藏在代碼里的隱患太多了,bug 率比較高,所以大型項(xiàng)目注定會(huì)用靜態(tài)類型語言來開發(fā)。

JavaScript 本身是一門動(dòng)態(tài)類型語言,因?yàn)楸辉絹碓蕉嗟挠脕黹_發(fā)各種大型項(xiàng)目,所以就有了對(duì)靜態(tài)類型的需求。TypeScript 就滿足了這個(gè)需求。而且還有額外的更好的提示、更易于重構(gòu)的好處。

所以,TypeScript 的出現(xiàn)和現(xiàn)在的火爆是必然會(huì)發(fā)生的。

以上就是TypeScript類型檢查詳談及火爆原因的詳細(xì)內(nèi)容,更多關(guān)于TypeScript類型檢查的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Mac下更換Homebrew鏡像源的實(shí)現(xiàn)方法

    Mac下更換Homebrew鏡像源的實(shí)現(xiàn)方法

    本文主要介紹了Mac下更換Homebrew鏡像源的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • 詳解git submodule update獲取不到最新提交的代碼

    詳解git submodule update獲取不到最新提交的代碼

    這篇文章主要介紹了詳解git submodule update獲取不到最新提交的代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 8種類型極品程序員,不知你屬于哪一種?

    8種類型極品程序員,不知你屬于哪一種?

    這篇文章主要介紹了8種類型極品程序員,不知你屬于哪一種?本文總結(jié)歸納了8種程類型的程序員,總結(jié)的非常精辟,來看看你是屬于哪一種吧~
    2014-09-09
  • WPF滑塊控件(Slider)的自定義樣式

    WPF滑塊控件(Slider)的自定義樣式

    這篇文章主要介紹了WPF滑塊控件(Slider)的自定義樣式的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-08-08
  • 分享18個(gè)最佳代碼編輯器/IDE開發(fā)工具

    分享18個(gè)最佳代碼編輯器/IDE開發(fā)工具

    這篇文章主要為開發(fā)人員收錄了18個(gè)最好的代碼編輯器/IDE工具,希望你會(huì)喜歡
    2014-05-05
  • 全網(wǎng)最強(qiáng)下載神器IDM使用教程之利用IDM加速下載百度網(wǎng)盤大文件的方法

    全網(wǎng)最強(qiáng)下載神器IDM使用教程之利用IDM加速下載百度網(wǎng)盤大文件的方法

    自從不限速度盤下載工具Pandownload被封殺后,有些網(wǎng)友紛紛表示:幸好我們還有IDM,但是很多朋友對(duì)IDM不是多了解,下面小編給大家介紹下下載神器IDM使用教程之利用IDM加速下載百度網(wǎng)盤大文件的方法,感興趣的朋友跟隨小編一起看看吧
    2023-01-01
  • Base64 編碼介紹、Base64編碼轉(zhuǎn)換原理與算法

    Base64 編碼介紹、Base64編碼轉(zhuǎn)換原理與算法

    Base64編碼,是我們程序開發(fā)中經(jīng)常使用到的編碼方法。它是一種基于用64個(gè)可打印字符來表示二進(jìn)制數(shù)據(jù)的表示方法,需要的朋友可以參考下
    2016-06-06
  • MobaXterm的安裝和使用及問題小結(jié)

    MobaXterm的安裝和使用及問題小結(jié)

    MobaXterm是一款全能的終端連接工具,支持SSH連接,支持FTP、串口等協(xié)議。接下來通過本文給大家分享MobaXterm的安裝和使用及遇到的問題解決方法,感興趣的朋友跟隨小編一起看看吧
    2021-05-05
  • Terraform集成簡(jiǎn)單Gitlab?CI方案詳解

    Terraform集成簡(jiǎn)單Gitlab?CI方案詳解

    這篇文章主要為大家介紹了Terraform?+?Gitlab?CI簡(jiǎn)單集成方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 都2019年了,還問http中GET和POST的區(qū)別

    都2019年了,還問http中GET和POST的區(qū)別

    最近看了一些同學(xué)的面經(jīng),發(fā)現(xiàn)無論什么技術(shù)崗位,還是會(huì)問到 get 和 post 的區(qū)別,而搜索出來的答案并不能讓我們裝得一手好逼,那就讓我們從 HTTP 報(bào)文的角度來擼一波,從而搞明白他們的區(qū)別
    2019-02-02

最新評(píng)論