TypeScript,是由微軟進行開發和維護的一種開源的編程語言。TypeScript是JavaScript的嚴格語法超集,提供了可選的靜態類型檢查。當前最新版本為TypeScript 5.8。
2012年10月1日,TypeScript首次公開亮相,由Anders Hejlsberg主導開發。2013年6月19日,微軟正式發布TypeScript 0.9。2014年4月3日,TypeScript 1.0正式版發布。2016年9月22日,TypeScript 2.0正式發布。2018年7月31日,微軟宣布推出TypeScript 3.0正式版。2023年3月27日,微軟發布了TypeScript 5.0版本。2025年3月11日,微軟官方宣布會徹底提高TypeScript的性能。
發展背景與歷史
發展背景
微軟意識到ECMAScript未來將會被應用到無數場景,而且他們公司內部團隊在處理復雜的JavaScript代碼庫時面臨著巨大的挑戰,所以他們覺得有必要創造強大的工具來幫助編寫JavaScript——尤其是針對大型JavaScript項目。基于此需求,TypeScript也確定了自己的定位和特性,它是JavaScript的超集,將類型檢查和靜態分析、顯式接口和最佳實踐結合到單一語言和編譯器中。通過在JavaScript上構建,TypeScript能夠更接近目標運行時,同時僅添加支持大型應用程序和大型團隊所需的語法糖。
發展歷史
2012年10月1日,TypeScript首次公開亮相,由Anders Hejlsberg主導開發。它是ECMAScript的類型化超集,可被編譯成常用的JavaScript。TypeScript還可以通過啟用豐富的工具體驗來極大地幫助提升生產力,與此同時開發者保持不變維護現有的代碼,并繼續使用喜愛的JavaScript庫。
2013年6月19日,微軟正式發布TypeScript 0.9。TypeScript 0.9的發布帶來了一些新的功能,包括語言功能的擴展,Visual Studio中工具的改進,新的語言服務讓交互性能獲得更加顯著。
2014年4月3日,TypeScript 1.0正式版發布。TypeScript 1.0考慮到大規模的ECMAScript應用程序的開發;提供一個穩定的平臺給用戶構建應用;同時創建和分享文件類型定義文件,兼容未來的TypeScript版本。
2016年9月22日,TypeScript 2.0正式發布。此次更新帶來了多項提升開發效率的新特性,進一步向ECMAScript(ES)標準演進看齊,全面增強對JavaScript生態庫與工具鏈的支持,并通過升級語言服務(Language Service)為各類開發工具提供更優質的代碼編輯體驗。
2018年7月31日,微軟宣布推出TypeScript 3.0正式版。TypeScript 3.0引入了一種新的靈活且可擴展的方式來構建項目、提供對參數列表進行操作新的強大支持能力、強制顯式檢查的新類型、更好的JSX支持、整體更好的錯誤處理等。
2020年8月,微軟TypeScript 4.0正式版發布,該版本沒有重大的突破性變化。
2023年3月27日,微軟發布了TypeScript 5.0版本。TypeScript 5.0引入了新的decorators標準,添加新功能從而在Node及其捆綁項中更好地支持ESM項目,為庫所有者提供了掌控泛型推理(generic inference)的新方法,擴展了JSDoc功能,簡化了配置,并進行了許多其他改進。
2025年3月1日,微軟宣布推出全新的TypeScript 5.8,這是一種基于ECMAScript的編程語言。用戶可以通過NuGet獲取,也可以使用NPM命令(npm install -D typescript)來進行安裝。3月11日,微軟官方開發者博客發文,宣布將徹底提高TypeScript的性能。為了實現性能提速目標,微軟已經開始著手進行TypeScript編譯器和工具的本地化移植。本地化實現將大幅提高編輯器啟動速度,將大多數構建時間縮短10倍,并顯著降低內存使用。
產品概況
TypeScript是由微軟進行開發和維護的一種開源的編程語言,常簡稱為"ts"。
ECMAScript的超集
TypeScript在JavaScript基礎上擴展了語法體系,通過與編輯器的深度集成(如智能提示、類型檢查),在編碼階段即時捕獲錯誤,提升開發效率。
可信賴的編譯結果
TypeScript代碼會轉換為純JavaScript,可在所有支持JavaScript的環境中運行:瀏覽器、node.js、Deno、Bun,以及各類應用場景。
大規模應用的安全保障
TypeScript完全兼容ECMAScript,并通過類型推斷(無需手動標注所有類型)提供強大的工具鏈支持,助力復雜項目維護。
產品特性
系統類型
從TypeScript的名字就可以看出來,「類型」是其最核心的特性。
類型系統按照「類型檢查的時機」來分類,可以分為動態類型和靜態類型。
動態類型是指在運行時才會進行類型檢查,這種語言的類型錯誤往往會導致運行時錯誤。JavaScript是一門解釋型語言,沒有編譯階段,所以它是動態類型。
靜態類型是指編譯階段就能確定每個變量的類型,這種語言的類型錯誤往往會導致語法錯誤。TypeScript在運行前需要先編譯為ECMAScript,而在編譯階段就會進行類型檢查,所以TypeScript是靜態類型。
類型系統按照「是否允許隱式類型轉換」來分類,可以分為強類型和弱類型。
TypeScript是完全兼容JavaScript的,它不會修改JavaScript運行時的特性,所以它們都是弱類型。
適用于任何規模
TypeScript非常適用于大型項目——這是顯而易見的,類型系統可以為大型項目帶來更高的可維護性,以及更少的bug。
在中小型項目中推行TypeScript的最大障礙就是認為使用TypeScript需要寫額外的代碼,降低開發效率。但事實上,由于有[類型推論][],大部分類型都不需要手動聲明了。相反,TypeScript增強了編輯器(IDE)的功能,包括代碼補全、接口提示、跳轉到定義、代碼重構等,這在很大程度上提高了開發效率。而且TypeScript有近百個[編譯選項][],如果你認為類型檢查過于嚴格,那么可以通過修改編譯選項來降低類型檢查的標準。
TypeScript還可以和ECMAScript共存。這意味著如果你有一個使用JavaScript開發的舊項目,又想使用TypeScript的特性,那么你不需要急著把整個項目都遷移到TypeScript,可以使用TypeScript編寫新文件,然后在后續更迭中逐步遷移舊文件。如果一些JavaScript文件的遷移成本太高,TypeScript也提供了一個方案,可以在不修改JavaScript文件的前提下,編寫一個[類型聲明文件](就像已經為 node.js 和 jQuery 所做的那樣),實現舊項目的漸進式遷移。
由此可見,TypeScript的發展已經深入到前端社區的方方面面了,任何規模的項目都或多或少得到了TypeScript的支持。
與標準同步發展
TypeScript的另一個重要的特性就是堅持與ECMAScript標準同步發展。
ECMAScript是JavaScript核心語法的標準,自2015年起,每年都會發布一個新版本,包含一些新的語法。一個新的語法從提案到變成正式標準,需要經歷以下幾個階段:
Stage 0:展示階段,僅僅是提出了討論、想法,尚未正式提案。
Stage 1:征求意見階段,提供抽象的API描述,討論可行性,關鍵算法等。
Stage 2:草案階段,使用正式的規范語言精確描述其語法和語義。
Stage 3:候選人階段,語法的設計工作已完成,需要瀏覽器、node.js等環境支持,搜集用戶的反饋。
Stage 4:定案階段,已準備好將其添加到正式的ECMAScript標準中。
一個語法進入到Stage 3階段后,TypeScript就會實現它。一方面,可以盡早的使用到最新的語法,幫助它進入到下一個階段;另一方面,處于Stage 3階段的語法已經比較穩定了,基本不會有語法的變更,可以能夠放心的使用它。除了實現ECMAScrip標準之外,TypeScript團隊也推進了諸多語法提案,比如可選鏈操作符(?.)、空值合并操作符(??)、Throw表達式、正則匹配索引等。
基礎類型
1.布爾值(boolean)
boolean是最基本的數據類型,對應true和false值。
2.數字(number)
和ECMAScript一樣,TypeScript里所有的數字都是浮點數。這些浮點數的類型是number。除了支持十進制和十六進制值,TypeScript還支持ECMAScript2015引入的二進制和八進制值。
3.字符串(string)
TypeScript使用string表示文本數據類型,與JavaScript相同,可以使用雙引號(")或單引號(')表示字符串。還可以使用模版字符串定義多行文本和內嵌表達式。這種字符串被反引號(`)包圍,并且以${expr}的形式嵌入表達式。
4.數組(Array)
定義數組的方式有兩種。第一種是在元素類型后面接[],表示由此類型元素組成的一個數組。第二種方式是使用數組泛型,Array<元素類型>。
5.元組(Tuple)
元組類型表示一個已知元素數量和類型的數組,各元素的類型不必相同。比如,可以定義一對值分別為string和number類型的元組。
6.枚舉(enum)
enum類型是對ECMAScript標準數據類型的一個補充。默認情況下,從0開始為元素編號,也可手動指定成員數值。
7.any類型
想為那些在編程階段還不清楚類型的變量指定一個類型。這些變量的值可能來自動態的內容,比如用戶輸入或第三方代碼庫。在這種情況下,不希望類型檢查器對這些值進行檢查,那么就可以使用any類型標記這些變量。
8.void類型
從某種程度上講,void類型與any類型相反,表示沒有任何類型。當一個函數沒有返回值時,可將其返回類型指定為void。聲明一個void類型的變量用途有限,因只能賦予undefined或null。
9.null和undefined類型
默認下,null和undefined是所有類型的子類型,可賦值給number類型變量。若編譯選項指定--strictNullChecks,則它們只能賦值給void或自身。
10.never類型
never類型表示永不出現的值的類型。返回never的函數需有無法達到的終點。
11.object類型
object表示非原始類型(即除number、string、boolean、symbol、null和undefined之外的類型)。
12.類型斷言
類型斷言是一個非常有用的功能。從服務器端接收到一個對象,開發者知道它是什么類型,但是編譯器不知道,這時候就可以使用類型斷言將對象的類型告訴編譯器,避免編譯器報錯。類型斷言有兩種形式,一種是尖括號語法,另一種是as語法。
接口與類
TypeScript接口是一系列抽象方法的聲明。在TypeScript中,接口是一個非常靈活的概念,需要由具體的類去實現。TypeScript使用接口聲明接口。
ECMAScript在ES6之后的版本里完善了對類的支持。TypeScript實現了所有ES6中類的功能(集成了可選的類型批注支持),并進行了擴展。下面介紹TypeScript擴展的部分。TypeScript增加了3種成員訪問修飾符:public、private和protected。其中public指屬性或方法是公有的,在任何地方都可以訪問到;private指屬性或方法是私有的,只能在類內部訪問;protected和private類似,區別是protected在子類中是允許被訪問的。
readonly是只讀屬性關鍵字,只允許出現在屬性聲明、索引簽名或構造函數中。修飾符和readonly還可在構造函數參數中使用,等同于在類中定義屬性時賦值,使代碼更簡潔。
抽象類不允許被實例化,抽象方法須被子類實現。TypeScript用abstract定義抽象類和方法。
JavaScript與TypeScript的區別
TypeScript可以使用JavaScript中的所有代碼和編碼概念,TypeScript是為了使JavaScript的開發變得更加容易而創建的。例如,TypeScript 使用類型和接口等概念來描述正在使用的數據,這使開發人員能夠快速檢測錯誤并調試應用程序。
參考資料 >
微軟發布 TypeScript 5.0 版本:體積更小、開發者更容易上手.騰訊網.2025-03-12
微軟宣布將 TypeScript 性能提高 10 倍.百家號.2025-03-12
TypeScript 誕生 10 周年.騰訊.2025-03-12
微軟正式發布TypeScript 0.9下載.IT之家.2025-03-12
TypeScript 1.0 正式版發布!.OSCHINA社區.2025-03-12
TypeScript 2.0 is now available.Microsoft.2025-03-12
TypeScript 3.0 正式發布:引入“項目引用”新概念.OSCHINA社區.2025-03-12
微軟發布TypeScript 5.8,提升代碼安全性、模塊兼容性及編譯性能.騰訊網.2025-03-14
微軟 TypeScript 4.0 正式版發布.新浪科技.2025-03-12
What is TypeScript?.typescriptlang.2022-11-16
TypeScript入門教程.xcatliu.2025-03-14
TypeScript VS JavaScript 深度對比.阿里云開發者社區.2025-03-14