TypeScript學習(三):聯合類型及推論

前面說到了typescript中的數據類型的定義及類型推論,定義的方式也就是單數據類型定義或者是任意類型的定義,但是我們在開發中,有時候會涉及到一些變量的值類型校驗,例如只需要數值和字符串,或者數值和布爾值等等,這個時候,我們就需要利用typescript中的聯合類型的定義方式,如下:

let a : string | number;

看到上面的定義方式,我們可以從字面意思上理解,意思是我們定義變量a的數值類型爲字符串類型或者是數值類型,所以我們在使用變量a的時候,給a賦值爲字符串類型或者是數值類型,如下:

let a : string | number;
a = 'string';
a = 1;

但是這樣定義就是確定了變量a的數值類型爲字符串類型或者是數值類型,所以我們如果賦值變量a的值不是這兩種類型及這兩種類型的子類型,編譯就會報錯。

在實際開發中,我們還會遇到一種情況,比如利用變量的某種屬性來做一些判斷,像利用字符串的長度判定等等,但是你會發現,按照上述定義變量的聯合類型時,這種編譯會報錯,如下:

let a : string | number;
a = 'string';
console.log(a.length);   // 打印變量a的長度
a = 1;
console.log(a.length);

這種聯合類型的定義,我們編譯的時候會發現,第二個console.log會編譯報錯:number類型沒有length屬性,爲什麼呢?

前面我們提到了typescript中有一種特性,就是變量的類型推論,我們在這裏定義變量a的時候,是以聯合類型定義的,及變量a是字符串或者是數值類型,第一個console打印的變量a的長度,可以打印,且值爲6,是因爲此時變量a的類型,typescript自動推論爲字符串類型,而字符串是有length屬性的,所以不會報錯;而第二個console打印變量a的長度,編譯報錯,是因爲typescript將變量a的類型自動推論爲number類型,而number類型是沒有length屬性的,所以編譯就報錯了。

 

 

到底啦!!!!!!!!!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章