TS中最常見的聲明合並(接口合並)
前言:
今天要講的內容還是TS相關,在TS中最常見的聲明合並:接口合並
在聊接口合並之前,我們先來聊聊聲明合並
聲明合並:
什麼是聲明合並?
其實很好理解,TS中的聲明合並,指的就是編譯器會針對同名的聲明合並為一個聲明
合並的結果:
合並後的聲明會同時擁有原先兩個或多個聲明的特性
疑問:
那這兩個或多個具體指的是什麼呢?
其實得分幾種情況講,今天要講的就是其中一種,最簡單也最常見的聲明合並類型是接口合並
1.合並接口
我們剛剛說瞭,“合並後的聲明會同時擁有原先兩個或多個聲明的特性”
接口的合並也是一樣,它會將雙方的成員放到一個同名的接口裡
需要註意的是,接口裡面的成員有函數成員和非函數成員,情況有所不一樣
1.1非函數成員
例如:
interface Box { height: number; } interface Box { width: number; } let box: Box = {height: 2, width: 3};
上述代碼中,定義瞭兩個名字都為Box
的同名接口(實際開發中,可能來源於不同的文件),最終裡面的東西會混合在一起
但是需要註意,以上情況裡頭的成員都是唯一的,但如果兩個接口中同時聲明瞭同名的非函數成員且它們的類型不同,則編譯器會報錯
1.2函數成員
而對於裡頭的函數成員來說,每個同名函數聲明都會被當成這個函數的一個重載。而且當接口 A與後來的接口 A合並時,後面的接口具有更高的優先級
例如官方的例子:
interface Cloner { clone(animal: Animal): Animal; } interface Cloner { clone(animal: Sheep): Sheep; } interface Cloner { clone(animal: Dog): Dog; clone(animal: Cat): Cat; }
最終會合並成一個聲明,如下:
interface Cloner { clone(animal: Dog): Dog; clone(animal: Cat): Cat; clone(animal: Sheep): Sheep; clone(animal: Animal): Animal; }
需要註意兩點:
- 每組接口裡的聲明順序不變
- 各組接口之間的順序是後來的接口重載出現在靠前位置
不過也有例外:當出現特殊的函數簽名時。 如果簽名裡有一個參數的類型是單一的字符串字面量(比如,不是字符串字面量的聯合類型),那麼它將會被提升到重載列表的最頂端
到此這篇關於TS中最常見的聲明合並(接口合並)的文章就介紹到這瞭,更多相關TS中的接口合並內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- TypeScript中extends的正確打開方式詳解
- Java設計模式之java原型模式詳解
- java設計模式–原型模式詳解
- Java 深入理解創建型設計模式之原型模式
- 如何通俗的解釋TypeScript 泛型