天天看點

Typescript(十一)聯合類型和類型守護

聯合類型:通俗點說就是一個變量可能有多種類型。

比如:一個人(person)有可能是老師(teacher),也有可能是服務員(waiter),但是不可能同時是老師和服務員。

animal就是一個聯合類型,但是現在直接調用animal中的方法的時候會報錯:

因為,其二種接口中的方法即屬性可能是不同的。

這個時候,我們就需要傳說中的類型保護

類型斷言就是通過斷言的方式确定傳遞過來的準确值,比如上面的程式,如果type是teacher,說明他就是老師,這時候就可以通過斷言animal as teacher,然後直接調用say方法,程式就不再報錯了。

同樣如果type是waiter,說明就是服務員,這時候調用run()方法,就不會報錯了。

這就是通過斷言的方式進行類型保護。也是最常見的一種類型保護形式。

使用in來判斷接口中是否有目前你要調用的文法。代碼如下:

先來寫一個新的add方法,方法接收兩個參數,這兩個參數可以是數字number也可以是字元串string,如果我們不做任何的類型保護,隻是相加,這時候就會報錯。代碼如下:

正确的寫法如下:

比如現在要作類型保護的是一個對象,這時候就可以使用instanceof文法來作。現在先寫一個numberobj的類,代碼如下:

然後我們再寫一個addobj的方法,這時候傳遞過來的參數,可以是任意的object,也可以是numberobj的執行個體,然後我們傳回相加值,當然不進行類型保護,這段代碼一定是錯誤的。

報錯不要緊,直接使用instanceof文法進行判斷一下,就可以解決問題。

另外要說的是,instanceof 隻能用在類上。這節課我大概說了四種類型保護的方式,每種方式都在不同場景中使用(還有一些不太常用的類型保護方式),可能需要自己深刻了解。

​​

繼續閱讀