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