TypeScript徹底解讀(26課時)_2.TypeScript徹底解讀-基礎類型

2.TypeScript徹底解讀-基礎類型html

 

src下新建example文件夾並新建文件。basic-type.ts。截圖中單詞拼錯了。後需注意一下是basic-type.tses6

 

能夠裝tslint的插件,配合tslint能夠作到很好的代碼提示typescript

 

boolean類型

boolean表示布爾類型npm

這裏咱們用let聲明瞭一個變量bool的類型是boolean布爾類型的。能夠先給他賦值,json

第二行是先聲明後賦值的形式數組

上面聲明瞭bool爲布爾類型的,後面再賦值123的話就會報錯 有提示的錯誤函數

123是數字自變量的類型spa

數字類型

ts和js同樣數字都是浮點類型,因此只有一個類型number類型插件

聲明變量num的類型是number 這裏報錯code

緣由是由於index.ts內聲明瞭重複的變量,咱們把index.ts內的代碼先刪掉就能夠了

若是咱們把字符串複製給num也是不能夠的

ts中支持es6中新增的二進制和八進制數字自變量的

支持二進制、八進制、十進制和十六進制 四種進制的數值

//數值類型
let num: number = 123
// num = 'abc'
num = 0b1111011 //這是一個二進制的123
num = 0o173//八進制
num = 0x7b //十六進制

 

字符串類型

 

在ts中還可使用es6的新語法,模板字符串

 

數組類型

string | number 必定要放在括號裏面,後面再加上[]表示這是一個數組

 

元組類型

對應的類型不符合就會報錯,後面賦值的時候,類型必須和上面定義的類型是一一對應的才行

上面定義的數字是三個值,若是在下面賦值的時候賦值第四個值也是不行,會報錯。

對比注意點2.6版本和2.6版本後是有區別的,把這些超出長度的值叫作越界元素

2.6版本以前,只要你越界的元素是前面規定的幾種類型之一就能夠,

2.6版本以後,長度必須按照規定類型的長度,超出的元素無論你的類型是什麼,都是不能夠的

枚舉類型

定義一個基礎的枚舉值形式,超級管理員,管理員和基礎用戶 三個角色

習慣枚舉以大寫字母開頭,例如這裏定義的Roles

這裏輸出的SUPER_ADMIN在枚舉裏面是第一個因此輸出了0,那麼ADMIN就是1 USER就是2

咱們也能夠自定義序號

 

也能夠只寫第一個爲1,那麼後面的自動遞增,USER就是3

 

指定中間的值是4,那麼後面的就遞增是5

superadmin仍是0,

經過索引值,取到對應的名字

能夠經過typescript官方查看實時編譯的結果

http://www.typescriptlang.org/play/index.html

any類型:

any表示任何類型

制定類型是any類型後,就能夠想賦什麼值就賦什麼值

也能夠給它賦值數字或者bool類型

咱們還能夠定義一個數組是any類型。那麼在裏面寫什麼值都是能夠的了

any能不用的時候儘可能不要用

 

void類型

和any類型是相反的。any類型表示客戶是任意類型。void類型表示沒有任何類型,什麼類型都不是

例如咱們 定義一個函數,給他指定什麼類型都不返回就給他返回一個void類型

傳入的text必須制定類型

這個時候就能體現ts的優越性了。指定類型,編寫代碼的時候就會給咱們提示錯誤。

 

這個地方必須傳入字符串類型,

指定返回值類型是void

在js中若是函數沒有指定返回類型那麼默認是undefined,這個地方咱們沒有默認返回值,因此他默認返回undefined。

void類型的值 能夠給他賦值undefined或者null

void就表示你這個函數沒有返回任何類型的值

這裏v咱們給他賦值null 竟然報錯了。

這是由於咱們的ts配置文件裏面。strict設置爲true,那麼會嚴格檢查,這個選項也會默認爲true。其中strictNullChecks是控制嚴格檢查的,v賦值null報錯就是由於 strictNullChecks設置爲true形成的

暫時這裏先把strict這裏註釋掉

這樣再把null賦值給v就不會提示錯了。

修改了tsconfig.json須要從新編譯,這裏npm start 從新啓動就能夠了。

 

noImplicitAny: true 影響的就是不指定參數類型

影響的就是指定的參數類型

 

null 和 undefined

在js中這倆 null 和 undefined 是基礎數據類型。在ts中他們既是值也是類型

指定它是undefined類型那麼 就只能給他賦值undefined的類型

若是咱們給它賦123呢那麼確定就會報錯了

同上 null類型

null和undefined是其餘類型的子類型

你能夠把這兩個值賦給其餘任意類型的值

例如咱們前面定義的num數字類型,。咱們便可給它賦值爲undefined也能夠給他賦值爲null類型

 

如咱們把配合文件  "strictNullChecks": true,  配置項打開

那麼這裏就會報錯了,咱們就不能把undefined類型賦值給其餘的類型, 就只能賦值給undefined類型的

若是你要求比較高的話 是能夠把這些嚴格檢查都開一下 。這裏咱們仍是先註釋掉

 

never類型

表示永遠不存在的類型

函數拋異常,之類的返回類型就是never類型

還有一種狀況就是死循環

調用一下拋錯的函數

never是任何任意類型的子類型,never能夠賦值給其餘任意類型,沒有任何類型是never的子類型

這裏定義一個當即執行函數,那麼選中的這裏的值就是never類型的

這個變量,咱們鼠標選中放過來 就提示是never類型的

never類型只能賦值never類型,這裏賦值123 就會報錯了。

num是數值類型,咱們能夠把never類型賦值給它

 

object

存的是對象在內存中地址的引用

咱們定義一個對象,obj存的就是這個對象在內存中地址的引用

若是把obj賦值給obj2 那麼obj2也是內存地址的引用

obj2修改的就是引用的地址的

 

定義一個方法接收參數就是一個對象類型,而後在裏面打印出來這個obj。上面已經修改obj2.name= ‘W’了因此輸出的anme是W

類型斷言

有點像是類型轉換

經過固定語法把某個值強行指定爲咱們要制定的類型

若是這個值有length屬性或者這個length屬性的值爲0,直接返回傳入的值的length。若是傳入的是數值,先經過toString方法,再獲取length

這裏咱們規定參數的類型爲string或者是number,方法返回爲number類型

這樣這裏就報錯了。實際上真正的緣由是,類型number不存在屬性length,之因此形成這個緣由是由於,咱們這個target多是string 也多是number類型。

若是傳入number是沒有length屬性的 因此就會報錯了,可是咱們知道這個函數代碼實際上沒有問題的。錯就錯在ts在這個地方作了類型的判斷。

因此這裏咱們經過類型斷言來指定類型

類型斷言有兩種寫法

這裏制定target就是一個stirng類型

第二種寫法: as

這樣咱們三個地方都加上類型斷言就沒有問題啦

後面講自定義類型保護的時候 就不用寫這麼屢次類型斷言了。

這兩種寫法雖然均可以,可是你之後使用JSX的話 只能適應as這種形式,不能使用尖括號的形式,尖括號形式看起來像是一個標籤

 

結束

相關文章
相關標籤/搜索