TypeScript是一種由微軟開(kāi)發(fā)的自由和開(kāi)源的編程語(yǔ)言。它是JavaScript的一個(gè)超集,而且本質(zhì)上向這個(gè)語(yǔ)言添加了可選的靜態(tài)類(lèi)型和基于類(lèi)的面向?qū)ο缶幊獭0驳滤埂ず査共瘢珻#的首席架構(gòu)師,已工作于TypeScript的開(kāi)發(fā)。2012年十月份,微軟發(fā)布了首個(gè)公開(kāi)版本的TypeScript,2013年6月19日,在經(jīng)歷了一個(gè)預(yù)覽版之后微軟正式發(fā)布了正式版TypeScript 0.9,向未來(lái)的TypeScript 1.0版邁進(jìn)了很大一步。
TypeScript是一種由微軟開(kāi)發(fā)的自由和開(kāi)源的編程語(yǔ)言。它是JavaScript的一個(gè)超集,而且本質(zhì)上向這個(gè)語(yǔ)言添加了可選的靜態(tài)類(lèi)型和基于類(lèi)的面向?qū)ο缶幊獭0驳滤埂ず査共瘢珻#的首席架構(gòu)師,已工作于TypeScript的開(kāi)發(fā)。
TypeScript擴(kuò)展了JavaScript的語(yǔ)法,所以任何現(xiàn)有的JavaScript程序可以不加改變的在TypeScript下工作。TypeScript是為大型應(yīng)用之開(kāi)發(fā)而設(shè)計(jì),而編譯時(shí)它產(chǎn)生 JavaScript 以確保兼容性。
TypeScript 支持為已存在的 JavaScript 庫(kù)添加類(lèi)型信息的頭文件,擴(kuò)展了它對(duì)于流行的庫(kù)如 jQuery,MongoDB,Node.js 和 D3.js 的好處。
TypeScript 背景
TypeScript 起源于開(kāi)發(fā)應(yīng)用程序規(guī)模的 JavaScript 應(yīng)用程序的需求。Microsoft的語(yǔ)言開(kāi)發(fā)者們說(shuō)內(nèi)部以及外部的客戶(hù)都表示他們構(gòu)建 JavaScript 代碼的問(wèn)題。
很多最終依賴(lài)于 JavaScript 的開(kāi)發(fā)者通常用編譯為 JavaScript 代碼的另一種語(yǔ)言寫(xiě)腳本,例如 CoffeeScript 和 Script# (讀作 ScriptSharp)。一個(gè)明顯的劣勢(shì)是也許無(wú)法從那另一種語(yǔ)言使用任何 JavaScript 的具體的語(yǔ)言特性,如果那種語(yǔ)言不支持它的話(huà)。
在 Microsoft 內(nèi)部,它導(dǎo)致了自定義工具以簡(jiǎn)化 JavaScript 組件的編寫(xiě)的需求。
TypeScript 特性
TypeScript 是一種給 JavaScript 添加特性的語(yǔ)言擴(kuò)展。
● 類(lèi)型批注和編譯時(shí)類(lèi)型檢查
●類(lèi)
●接口
●模塊
●lambda 函數(shù)
語(yǔ)法上,TypeScript 很類(lèi)似于 JScript .NET,另外一個(gè)添加了對(duì)靜態(tài)類(lèi)型,經(jīng)典的面向?qū)ο笳Z(yǔ)言特性如類(lèi),繼承,接口和命名空間等的支持的 Microsoft 對(duì) ECMA-262 語(yǔ)言標(biāo)準(zhǔn)的實(shí)現(xiàn)。
TypeScript 類(lèi)型批注
TypeScript 通過(guò)類(lèi)型批注提供靜態(tài)類(lèi)型以在編譯時(shí)啟動(dòng)類(lèi)型檢查。這是可選的,而且可以被忽略而使用 JavaScript 常規(guī)的動(dòng)態(tài)類(lèi)型。
對(duì)于基本類(lèi)型的批注是 number, bool 和 string。而弱或動(dòng)態(tài)類(lèi)型的結(jié)構(gòu)則是 any 類(lèi)型。
類(lèi)型批注可以被導(dǎo)出到一個(gè)單獨(dú)的聲明文件以讓使用類(lèi)型的已被編譯為 JavaScript 的 TypeScript 腳本的類(lèi)型信息可用。批注可以為一個(gè)現(xiàn)有的JavaScript 庫(kù)聲明,就像已經(jīng)為 Node.js 和 jQuery 所做的那樣。
當(dāng)類(lèi)型沒(méi)有給出時(shí),TypeScript 編譯器利用類(lèi)型推斷以推斷類(lèi)型。如果由于缺乏聲明,沒(méi)有類(lèi)型可以被推斷出,那么它就會(huì)默認(rèn)為是動(dòng)態(tài)的 any 類(lèi)型。
TypeScript 聲明文件
當(dāng)一個(gè) TypeScript 腳本被編譯時(shí),有一個(gè)產(chǎn)生作為編譯后的 JavaScript 的組件的一個(gè)接口而起作用的聲明文件 (具有擴(kuò)展名 .d.ts) 的選項(xiàng)。在這個(gè)過(guò)程中編譯器基本上帶走所有的函數(shù)和方法體而僅保留所導(dǎo)出類(lèi)型的批注。當(dāng)?shù)谌介_(kāi)發(fā)者從 TypeScript 中使用它時(shí),由此產(chǎn)生的聲明文件就可以被用于描述一個(gè) JavaScript 庫(kù)或模塊導(dǎo)出的虛擬的 TypeScript 類(lèi)型。
聲明文件的概念類(lèi)似于 C/C++ 中頭文件的概念。
類(lèi)型聲明文件可以為已存在的 JavaScript 庫(kù)手寫(xiě),就像為 jQuery 和 Node.js 所做的那樣。
TypeScript 對(duì) ECMAScript 6 的支持
TypeScript 增加了對(duì)為即將到來(lái)的 ECMAScript 6 標(biāo)準(zhǔn)所建議的特性的支持。
如下為其構(gòu)想:
類(lèi) (以及繼承) 模塊Arrow functions
盡糶管標(biāo)準(zhǔn)洎頭還條未準(zhǔn)備就緒,Microsoft 說(shuō)它的目標(biāo)是使 TypeScript 的特性與建議的標(biāo)準(zhǔn)看齊。
類(lèi)
TypeScript 支持集成了可選的類(lèi)型批注支持的 ECMAScript6 的類(lèi)。
泛型
這種語(yǔ)言的規(guī)范說(shuō)明一個(gè)未來(lái)的版本將會(huì)支持基于類(lèi)型擦除的泛型編程。
TypeScript 與 JavaScript 的兼容性
TypeScript 是 JavaScript 的一個(gè)超集。默認(rèn)情況下編譯器以 ECMAScript 3 (ES3) 為目標(biāo)但 ES5 也是受支持的一個(gè)選項(xiàng)。一個(gè) TypeScript 應(yīng)用可以利用已存在的 JavaScript 腳本。編譯后的 TypeScript 腳本也可以從 JavaScript 中使用。
現(xiàn)有框架如 jQuery 和Node.js 等受到完全支持。這些庫(kù)的類(lèi)型聲明在源代碼中提供。
支持的瀏覽器和平臺(tái)
運(yùn)行于任何平臺(tái)上的任何網(wǎng)頁(yè)瀏覽器都可以運(yùn)行 TypeScript 由于它僅僅是被編譯為標(biāo)準(zhǔn)的 JavaScript。一個(gè)腳本既可以被預(yù)編譯為 JavaScript 也可以通過(guò)為 TypeScript 包含 JavaScript 編譯器實(shí)時(shí)編譯。
TypeScript 工具
TypeScript 編譯器,名稱(chēng)叫 tsc, 是用可以被編譯為可以被執(zhí)行在任何 JavaScript 引擎中,在任何宿主 - 如瀏覽器 - 中的常規(guī) JavaScript 的 TypeScript 寫(xiě)的。編譯器包被綁定于一個(gè)可以執(zhí)行編譯器的腳本宿主。使用 Node.js 作為宿主的 Node.js 包同樣可以獲得。
也有用 JavaScript 寫(xiě)的客戶(hù)端編譯器的一個(gè) alpha 版本,它在頁(yè)面載入時(shí),實(shí)時(shí)執(zhí)行 JavaScript 代碼。
這種編譯器的當(dāng)前版本默認(rèn)支持 ECMAScript 3。一個(gè)選項(xiàng)是允許以 ECMAScript 5 為目標(biāo)以利用該版本獨(dú)有的語(yǔ)言特性。類(lèi),盡管是 ECMAScript 6 標(biāo)準(zhǔn)的一部分,在這兩個(gè)模式下都可用。
TypeScript 支持
IDE 和編輯器支持
Microsoft為Visual Studio 2012 和 WebMatrix 提供了一個(gè)插件,也為Sublime Text, Emacs 和Vim 提供了基本的文本編輯器支持。在線(xiàn)的 Cloud9 IDE也支持 TypeScript。JetBrains 也計(jì)劃在他們的 IDE 系列中支持 TypeScript, 而且已經(jīng)發(fā)行了具有部分支持的 PhpStorm 6 和 WebStorm 6 預(yù)覽版本。