淺談 C#、Typescript、JavaScript

C#,TS,JS

之前作後端的時候主要是微軟的項目爲主,隨着公司業務發展須要後來轉向偏前端項目的開發,今天我到了聊聊微軟主導的TypeScript,如你使用過C#或Visual Basic .NET等語言,你會很熟悉。javascript

Typescript 來歷

在微軟強大的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 介紹

TypeScriptJavaScript 的超集,所以任何 JavaScript 都是合法的 TypeScript(很是像 C 和 Objective-C 的關係),TypeScript結合了類型檢查和靜態分析,顯式接口。TypeScript是微軟的開源項目,它是由C#之父安德斯·海爾斯伯格(Anders Hejlsberg)發起的。git

Typescript作了些什麼?

JavaScript 只是一個腳本語言,並不是真正設計用於開發大型 Web 應用,JavaScript 沒有提供類和模塊等概念,對於一個真正的應用開發,TypeScript 擴展JavaScript 並實現了這些特性。程序員

TypeScript主要特色包括:typescript

  • 微軟推出的開源語言,使用 Apache 受權協議
  • 增長了靜態類型、類、模塊、接口和類型註解
  • 能夠編譯成可讀的、標準的 JavaScript
  • 支持開發大規模 JavaScript 應用,支持全部瀏覽器,主機和操做系統
  • 可用於開發大型應用,並保證編譯後的JavaScript代碼兼容性
  • 易學和易於理解

Typescript與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 異同點

雖然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基礎掌握就比較容易了,感謝興趣的同窗趕忙上手試試吧。

參考資料

C# TypeScript官方 TypeScript Handbook

相關文章
相關標籤/搜索