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