之前作後端的時候主要是微軟的項目爲主,隨着公司業務發展須要後來轉向偏前端項目的開發,今天我到了聊聊微軟主導的TypeScript
,如你使用過C#或Visual Basic .NET等語言,你會很熟悉。javascript
在微軟強大的visual studio2012
版本未出以前,對Javascript
的支持度卻如屎同樣渣,直到VS2012纔有了質的飛越,估計微軟內部在作VS升級同時也一樣發現了Javascript
的缺陷,由於它不適合構建大規模應用開發,我估計同步就那個時候開始Typescript
研發,或許更早。微軟於2012年9月12日正式發佈VS2012版本,緊隨其後於2012年10月1日對外公佈了Typescript
,同時宣佈開源。html
能夠說Typescript
到來和微軟開源戰略離不開,能夠說安德斯·海爾斯伯格(Anders Hejlsberg)是開源信徒,參與了.NET
核心引擎 CoreCLR
開源,隨後他主導了Typescript
開源。前端
能夠說Typescript
到來和微軟開源戰略離不開,能夠說安德斯·海爾斯伯格(Anders Hejlsberg)是開源信徒,參與了.NET
核心引擎 CoreCLR
開源,隨後他主導了Typescript
開源。java
TypeScript
是 JavaScript
的超集,所以任何 JavaScript 都是合法的 TypeScript(很是像 C 和 Objective-C 的關係),TypeScript
結合了類型檢查和靜態分析,顯式接口。TypeScript
是微軟的開源項目,它是由C#
之父安德斯·海爾斯伯格(Anders Hejlsberg)發起的。git
JavaScript
只是一個腳本語言,並不是真正設計用於開發大型 Web 應用,JavaScript
沒有提供類和模塊等概念,對於一個真正的應用開發,TypeScript
擴展JavaScript
並實現了這些特性。程序員
TypeScript主要特色包括:typescript
JavaScript
JavaScript
應用,支持全部瀏覽器,主機和操做系統JavaScript
代碼兼容性TypeScript
從核心語言方面和類概念的模行方面對JavaScript
對象模型進行擴展,所以現有的 JavaScript
代碼無需作任何修改即可與TypeScript
一塊兒使用,TypeScript
經過類型註解提供編譯時的靜態類型檢查。TypeScript
可處理已有的 JavaScript
代碼,並只對其中的 TypeScript
代碼進行編譯。後端
咱們來看錶:api
對比項目 | TypeScript | JavaScript | 注意 |
---|---|---|---|
基本類型 | boolean number string Array Tuple Enum any void null undefined never object | string number boolean null undefined symbol | TypeScript 中 object 表示的是否是 JavaScript 基本類型的類型 |
變量聲明 | let const var | let const var | 基本一致 |
接口 | interface | 無 | TypeScript 的核心是類型檢查,所以接口充當了命名這些類型的角色 |
類 | class abstract class readonly … | class 無 abstract class | 基本一致,但不一樣的可能發生在將來,TypeScript 使用 private 來定義私有,而 JavaScript 將來極有可能將 #.xx 來定義私有寫入標準。TypeScript 支持抽象類,只讀等等。 |
函數 | N | N | 基本一致,參數賦默認值,剩餘參數等等,惟一不一樣的是 TypeScript 支持?可選參數 |
泛型 | Generics | 無 | 泛型是一個特別靈活的可重用指定不一樣類型來控制具體類型的類型,TypeScript 支持 |
枚舉 | Enums | 無 | TypeScript 支持的枚舉不只能夠默認從 0 開始,也能夠賦值具體的字符串,它的操做空間很是大 |
類型推斷 | 支持 | 無 | let x = 3; TypeScript 能夠經過 3 來推斷 x 的類型是 number |
高階類型 | & typeof instanceof … | 無 | TypeScript 獨有 |
Symbols | N | N | Symbol 同樣 |
迭代器 | N | N | 若是實現了 Symbol.iterator ,那麼就被視爲可迭代的,術語上和 JavaScript 定義的同樣 |
Generators | N | N | 同樣 |
模塊系統 | N | export import | 事實上 TypeScript 支持多種多樣的模塊系統,既有 ESModule 也有 Commonjs 規範,甚至還有 AMD UMD 等 |
其餘 | N | N | 因爲 TypeScript 是 JavaScript 的超集,所以 ES2016 以後以及 ESNext 定義的 api 均可以直接在 TypeScript 中使用 並不須要語言支持,至於其餘一些好比 JSX Mixins 等等,因爲這些不屬於 JavaScript 標準所以這裏再也不復述 。 |
咱們看下TypeScript
強大的類型檢查 數組
雖然C#
和Typescript
都是微軟主導的,並且都是大牛安德斯·海爾斯伯格(Anders Hejlsberg)領導開發的,他們之間有不少共同點,接下來我一個C#程序員的視角來理解Typescript
。
C# 值類型又細分爲簡單類型、枚舉類型、結構類型和能夠爲 null 的值類型。 C# 引用類型又細分爲類類型、接口類型、數組類型和委託類型。
對比項目 | TypeScript | C# | 說明 |
---|---|---|---|
數值 | number | int,long,float,double,byte,char,decimal等 | TypeScript和JavaScript同樣,全部的數字都是浮點數,都是用number表示,這樣也省了很了事,少了C#裏相似long轉int overflow問題。 |
布爾類型 | Boolean | Boolean | 基本同樣 |
枚舉 | enum | enum | javascript沒有enum,這也是TypeScript爲此做的補充。功能上和C#差很少; 目的都是爲數值提供一個友好的名字,增長代碼可讀性和可重構性;C#的枚舉值toString()會返回枚舉的文本值,而TypeScript是數值 |
字符串 | String | String | 基本同樣,不過TS支持用單引號 |
Symbol | Symbol | 無 | 用來看成惟一的標識,全部新建出來的Symbol都是不一樣的,無論傳進去的值是否同樣。很是合適用來作KEY |
any | any | dynamic | 兩者很類似,dynamic是FrameWork4.0的新特性,dynamic是FrameWork4.0的新特性,編譯期默認dynamic對象支持你想要的任何特性 |
void | void | void | 相同,表示沒有任何東西 |
null | null | null | 基本相同,注意,C#中值類型不能設置爲null,必須給一個具體值 |
undefined | undefined | 無 | |
never | never | 無 | 是TypeScript引進的,我的以爲是一種語義上的類型,用來表示永遠不會獲得返回值,好比while(true){}或throw new Error()之類。 |
Array | Array | Array | C#裏數組能夠用結合Linq 功能很強大,不過TS也能夠用第三方庫如lodash 來實現 |
元組 | 解構 | Tuple | 相似,C#老版的Tuple 有點雞肋,不過載C#7.0已經更新了,TS解構也一樣能實現 |
這篇文章介紹個人開發歷程並介紹了從TypeScript
歷史和與JavaScript
異同點以及C#
和TypeScript
的異同點,從若是你學過java,VB,C#,PHP同時有JavaScript
基礎掌握就比較容易了,感謝興趣的同窗趕忙上手試試吧。