<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
TypeScript 這些年越來越火,可以說是前端工程師的必備技能了,各大框架都基於它實現。
那麼,TypeScript 的出現和爆火是偶然發生的嗎?其實不是,類似 TypeScript 這種靜態型別語言成為主流是必然會發生的。為什麼這麼說呢?
型別具體點來說就是指 number、boolean、string 等基礎型別和 Object、Function 等複合型別,它們是程式語言提供的對不同內容的抽象:
不同型別變數佔據的記憶體大小不同:boolean 型別的變數只會分配 1 個位元組的記憶體,而 number 型別的變數則會分配 8 個位元組的記憶體,給變數宣告了不同的型別就代表了會佔據不同的記憶體空間。
不同型別變數可做的操作不同:number 型別可以做加減乘除等運算,boolean 就不可以,複合型別中不同型別的物件可用的方法不同,比如 Date 和 RegExp,變數的型別不同代表可以對該變數做的操作就不同。
我們知道了什麼是型別,那自然可以想到型別和所做的操作要匹配才行,這就是為什麼要做型別檢查。
如果能保證對某種型別只做該型別允許的操作,這就叫做型別安全**。比如你對 boolean 做加減乘除,這就是型別不安全,你對 Date 物件呼叫 exec 方法,這就是型別不安全。反之,就是型別安全。
所以,型別檢查是為了保證型別安全的。
型別檢查可以在執行時做,也可以執行之前的編譯期做。這是兩種不同的型別,前者叫做動態型別檢查,後者叫做靜態型別檢查。兩種型別檢查各有優缺點。
在原始碼中不保留型別資訊,對某個變數賦什麼值、做什麼操作都是允許的,寫程式碼很靈活。但這也埋下了型別不安全的隱患,比如對 string 做了乘除,對 Date 物件呼叫了 exec 方法,這些都是執行時才能檢查出來的錯誤。
其中,最常見的錯誤應該是
“null is not an object”、“undefined is not a function”
之類的了,寫程式碼時沒發現型別不匹配,到了執行的時候才發現,就會有很多這種報錯。
所以,動態型別雖然程式碼寫起來簡單,但程式碼中很容易藏著一些型別不匹配的隱患。
則是在原始碼中保留型別資訊,宣告變數要指定型別,對變數做的操作要和型別匹配,會有專門的編譯器在編譯期間做檢查。
靜態型別給寫程式碼增加了一些難度,因為你除了要考慮程式碼要表達的邏輯之外,還要考慮型別邏輯:變數是什麼型別的、是不是匹配、要不要做型別轉換等。
不過,靜態型別也消除了型別不安全的隱患,因為在編譯期間就做了型別檢查,就不會出現對 string 做了乘除,呼叫了 Date 的 exec 方法這類問題。
所以,靜態型別雖然程式碼寫起來要考慮的問題多一些,會複雜一些,但是卻消除了程式碼中潛藏型別不安全問題的可能。
知道了動態型別檢查和靜態型別檢查的區別,我們自然可以得出這樣的結論:
動態型別只適合簡單的場景,對於大專案卻不太合適,因為程式碼中可能藏著的隱患太多了,萬一線上報一個型別不匹配的錯誤,那可能就是大問題。
而靜態型別雖然會增加寫程式碼的成本,但是卻能更好的保證程式碼的健壯性,減少 Bug 率。
所以,大型專案註定會用靜態型別語言開發。
JavaScript 本來是為了瀏覽器的表單驗證而設計的,所以就設計成了動態型別的,寫程式碼比較簡單。
但 JavaScript 也沒想到它後來會被用來開發各種專案,比如 PC 和行動端的網頁、React Native 跨端 App、小程式、Electron 桌面端、Node.js 伺服器端、Node.js 工具鏈等。
開發各種大型專案的時候,JavaScript 的動態型別語言的缺點就暴露出來了,bug 率太高了,健壯性很難保證。那自然就有了對靜態型別的強烈需求,於是 TypeScript 應運而生。
TypeScript 給 JavaScript 新增了一套靜態型別系統,從動態型別語言變成了靜態型別語言,可以在編譯期間做型別檢查,提前發現一些型別安全問題。
而且,因為程式碼中新增了靜態型別,也就可以配合編輯器來實現更好的提示、重構等,這是額外的好處。
所以,TypeScript 的火爆是一個偶然麼?不,我覺得是必然,因為大型專案註定會用靜態型別語言來開發。
型別決定了變數的記憶體大小和可以對它進行的操作,保證對什麼型別只做什麼操作就叫做型別安全,而保證型別安全的方式就是型別檢查。
型別檢查可以在執行時做,叫做動態型別檢查,也可以在編譯時做,叫做靜態型別檢查。
動態型別可能藏在程式碼裡的隱患太多了,bug 率比較高,所以大型專案註定會用靜態型別語言來開發。
JavaScript 本身是一門動態型別語言,因為被越來越多的用來開發各種大型專案,所以就有了對靜態型別的需求。TypeScript 就滿足了這個需求。而且還有額外的更好的提示、更易於重構的好處。
所以,TypeScript 的出現和現在的火爆是必然會發生的。
以上就是TypeScript型別檢查詳談及火爆原因的詳細內容,更多關於TypeScript型別檢查的資料請關注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