TypeScript的特點(diǎn)
相較于JS(ES6+)
- ts是js的超集用僧,即你可以在ts中使用原生js語法
- ts需要靜態(tài)編譯语稠,它提供了強(qiáng)類型與更多面向?qū)ο蟮膬?nèi)容
- ts最終仍要編譯為弱類型的js文件辆苔,基于對(duì)象的原生js,再運(yùn)行。故ts相較java/C#這樣天生面向?qū)ο笳Z言是有區(qū)別和局限的
- ts是由微軟牽頭主導(dǎo)的唁奢,主要來自C#
JS進(jìn)化
因?yàn)镋CMA標(biāo)準(zhǔn)的進(jìn)化甚负,很多TS的專屬特性已在原生JS中落地柬焕,其中包括但不限于:
- let / const 基于塊級(jí)作用域的變量聲明
- lambda(箭頭函數(shù))
- class 類
所以,除強(qiáng)類型與泛型等從C#引入的面向?qū)ο筇匦?/strong>梭域,JS與TS的差異已基本抹平斑举。
區(qū)別
- 基本數(shù)據(jù)類型不同
js: boolean類型、number類型病涨、string類型富玷、array類型、nudefined既穆、null
ts: 除了上面的類型外赎懦,還包含tuple類型(元組類型)、enum類型(枚舉類型)幻工、any類型(任意類型) - js 動(dòng)態(tài)類型励两,運(yùn)行運(yùn)行時(shí)明確變量的類型,變量的類型由變量的值決定囊颅,并跟隨值的改變而改變当悔;ts 靜態(tài)類型傅瞻,聲明時(shí)確定類型,之后不允許修改
- js 直接運(yùn)行在瀏覽器和node.js環(huán)境中盲憎;ts 編譯運(yùn)行嗅骄,始終先編譯成JavaScript在運(yùn)行
- js 弱類型,數(shù)據(jù)類型可以被忽略的語言焙畔。一個(gè)變量可以賦不同數(shù)據(jù)類型的值掸读;ts 強(qiáng)類型,一旦一個(gè)變量被指定了某個(gè)數(shù)據(jù)類型宏多,如果不經(jīng)過強(qiáng)制轉(zhuǎn)換儿惫,那么它就永遠(yuǎn)是這個(gè)數(shù)據(jù)類型了;
- ts增加的語法:
(1)靜態(tài)類型:有利于檢查代碼錯(cuò)誤伸但,運(yùn)行前檢查類型錯(cuò)誤
(2)函數(shù)缺省參數(shù)值
(3)class類
(4)模塊:可以把聲明肾请、數(shù)據(jù)、函數(shù)和類封裝在模塊中
(5)接口
(6)類型注解:通過類型注解來增加編譯時(shí)靜態(tài)類型檢查
使用TS的原因\好處
TS的設(shè)計(jì)目的應(yīng)該是解決JS更胖,弱類型和沒有命名空間導(dǎo)致很難模塊化铛铁,不適合開發(fā)大型程序的短處。
- 開源却妨,跨平臺(tái)饵逐。它本身不需要考慮運(yùn)行環(huán)境的問題,所有支持JavaScript的地方都可以使用typescript彪标;
- 引入靜態(tài)類型聲明倍权,減少不必要的類型判斷和文檔注釋;
- 及早發(fā)現(xiàn)錯(cuò)誤捞烟,靜態(tài)類型檢查1或編譯時(shí)發(fā)現(xiàn)問題薄声,不用等到運(yùn)行;
- 類题画、接口的使用更易于構(gòu)建和維護(hù)組件默辨;
- 重構(gòu)更方便可靠,適合大型項(xiàng)目苍息;
*ps:靜態(tài)類型檢查:在不運(yùn)行代碼的情況下缩幸,根據(jù)要操作的值的類型來檢測(cè)代碼中什么是錯(cuò)誤和什么不是錯(cuò)誤 *