typescript 交叉型別和聯合型別

2021-10-07 17:29:07 字數 1722 閱讀 3866

1.1 交叉型別

inte***ce

doninte***ce

inte***ce

catinte***ce

//這裡的pet將兩個型別合併,所以pet必須保護兩個型別所定義的方法

let pet : doninte***ce & catinte***ce =

, jump:

function()

}

1.2 聯合型別

let a : number | string =

"a";

let b :

"a"|

"b"|

"c";

let c :1|

2|3;

b ="a"

;// b = 1;報錯

class

dogimplements

catinte***ce

run()}

class

catimplements

catinte***ce

eat()}

enum master

;function

getpet

(master : master)

1.3 可區分的聯合型別

結合了聯合型別和字面量型別的方法

核心思想,乙個型別如果是多個型別的聯合型別,並且每個型別都有乙個公共的屬性,那麼我們可以拼接這個公共的屬性,建立型別的保護區塊

inte***ce

square

inte***ce

reactngle

type shape = square | reactngle | circle;

function

area

(s:shape)

}

此時我們將**公升級,模擬場景,後續可能會新增乙個型別

inte***ce

circle

但是有個問題,當我們使用這個函式時,傳入了circle型別的引數,會返回undefined

如果避免這種問題呢,讓編譯器可以提前識別出錯誤

可以給這個函式取乙個返回值

可以給這個函式中定義乙個default,這樣可以限定,每次我定義乙個新的型別,就要加乙個case

原理是, 當我們定義了新的型別時, 且加入到type中去, 傳入的引數s如果不是never型別,那證明前面的case有遺漏,進行報錯提醒

只有當type不存在的型別時, 傳入的引數會進行err丟擲報錯

/**

* default :

return ( (e : never ) => )(s)

* */

修改過後的**

inte***ce

square

inte***ce

reactngle

type shape = square | reactngle | circle;

function

area

(s:shape)

)(s)

TypeScript高階型別之交叉型別與聯合型別

所謂的高階型別就是指ts為了保障語言的靈活性,所引入的一些語言特性,這些特性將有助於我們應對複雜多變的開發場景。將多個型別合併成乙個型別,新的型別將具有所有型別的特性,所以交叉型別特別適用物件混入的場景。inte ce doginte ce inte ce catinte ce let pet do...

TypeScript 基礎型別

基礎型別可以依據是否含有型別關鍵字分為兩類 注意 所有型別關鍵字都是小寫的。注 這種分類並不嚴謹,分類的目的僅僅用於幫助記憶型別用來指定變數的型別,相容的型別之間才能進行賦值 傳參等操作。宣告變數型別使用變數名 型別格式,如let decimal number 10,宣告之後decimal就只能接受...

typescript 索引型別

1.索引型別 let obj function getkey obj any keys string 指定所包含的屬性 console.log getkey obj,a b 放入不包含的屬性,正常情況我們希望這種要報錯 console.log getkey obj,c f 1.2 接下來學習幾種方法...