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

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

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

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

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

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

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

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

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

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

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

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

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

動態(tài)類型檢查

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

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

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

之類的了,寫代碼時沒發(fā)現(xiàn)類型不匹配,到了運行的時候才發(fā)現(xiàn),就會有很多這種報錯。

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

靜態(tài)類型檢查

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

靜態(tài)類型給寫代碼增加了一些難度,因為你除了要考慮代碼要表達的邏輯之外,還要考慮類型邏輯:變量是什么類型的、是不是匹配、要不要做類型轉(zhuǎn)換等。

不過,靜態(tài)類型也消除了類型不安全的隱患,因為在編譯期間就做了類型檢查,就不會出現(xiàn)對 string 做了乘除,調(diào)用了 Date 的 exec 方法這類問題。

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

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

動態(tài)類型只適合簡單的場景,對于大項目卻不太合適,因為代碼中可能藏著的隱患太多了,萬一線上報一個類型不匹配的錯誤,那可能就是大問題。

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

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

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

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

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

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

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

所以,TypeScript 的火爆是一個偶然么?不,我覺得是必然,因為大型項目注定會用靜態(tài)類型語言來開發(fā)。

總結(jié)

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

類型檢查可以在運行時做,叫做動態(tài)類型檢查,也可以在編譯時做,叫做靜態(tài)類型檢查。

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

JavaScript 本身是一門動態(tài)類型語言,因為被越來越多的用來開發(fā)各種大型項目,所以就有了對靜態(tài)類型的需求。TypeScript 就滿足了這個需求。而且還有額外的更好的提示、更易于重構(gòu)的好處。

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

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

相關(guān)文章

  • 詳解Git.gitignore開發(fā)必備建議收藏

    詳解Git.gitignore開發(fā)必備建議收藏

    這篇文章主要介紹了Git.gitignore的全面詳解,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • Git撤銷&回滾操作(git reset 和 get revert)

    Git撤銷&回滾操作(git reset 和 get revert)

    這篇文章主要介紹了Git撤銷&回滾操作(git reset 和 get revert),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 人工智能(AI)首選Python的原因解析

    人工智能(AI)首選Python的原因解析

    Python雖然是腳本語言,但是因為容易學(xué),迅速成為科學(xué)家的工具。Python 已經(jīng)是數(shù)據(jù)分析和 AI的第一語言,網(wǎng)絡(luò)攻防的第一黑客語言,正在成為編程入門教學(xué)的第一語言,云計算系統(tǒng)管理第一語言
    2019-06-06
  • 程序員 代碼是從頭編還是使用框架好呢?

    程序員 代碼是從頭編還是使用框架好呢?

    為什么框架發(fā)展得越來越好,因為越來越多的程序員選擇使用框架。當(dāng)處于實際的項目開發(fā)中,程序員就會發(fā)現(xiàn)項目周期短,使用框架可以最有效地節(jié)約時間。如果完全從頭開始編程,使用時間太多不說,對程序員的個人編碼水平也提出了很高的要求
    2017-08-08
  • 解決YYC松鼠短視頻系統(tǒng)上傳視頻會被壓縮的問題

    解決YYC松鼠短視頻系統(tǒng)上傳視頻會被壓縮的問題

    這篇文章主要介紹了解決YYC松鼠短視頻系統(tǒng)上傳視頻會被壓縮的問題,非常不錯具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • 字符編碼詳解(基礎(chǔ))

    字符編碼詳解(基礎(chǔ))

    字符編碼問題, 對于一個在偉大天朝的程序員來說, 幾乎不可能遇不到, 從我剛開始接觸Coding到現(xiàn)在, 亂碼, 編碼轉(zhuǎn)換問題就好像一直沒有停息過.
    2009-09-09
  • svn 常用命令集合

    svn 常用命令集合

    SVN是subversion的縮寫,是一個開放源代碼的版本控制系統(tǒng),通過采用分支管理系統(tǒng)的高效管理,簡而言之就是用于多個人共同開發(fā)同一個項目,實現(xiàn)共享資源,實現(xiàn)最終集中式的管理
    2020-07-07
  • 5個Linux平臺程序員最愛的開發(fā)工具匯總

    5個Linux平臺程序員最愛的開發(fā)工具匯總

    這篇文章主要介紹了5個Linux平臺程序員最愛的開發(fā)工具匯總,程序最重要的工具就是源碼編輯器了,或者是一個全能的IDE,本文就羅列了5個Linux平臺最常用的編輯給大家,需要的朋友可以參考下
    2014-09-09
  • 關(guān)于mapboxgl加載tiff的問題

    關(guān)于mapboxgl加載tiff的問題

    這篇文章主要介紹了mapboxgl加載tiff,先使用geotiff.js解析tiff數(shù)據(jù),再配合使用canvas繪制圖片導(dǎo)出base64格式數(shù)據(jù),然后就可以使用添加到mapboxgl圖層了,本文結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-09-09
  • Git常用命令介紹

    Git常用命令介紹

    Git是一個開源的分布式版本控制系統(tǒng),可以有效、高速地處理從很小到非常大的項目版本管理。這篇文章介紹了Git的常用命令,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-01-01

最新評論