您好,登錄后才能下訂單哦!
小編給大家分享一下TS中最常見的聲明合并有哪些,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
前言:
在TS中最常見的聲明合并:接口合并
在聊接口合并之前,我們先來聊聊聲明合并
聲明合并:
什么是聲明合并?
其實(shí)很好理解,TS中的聲明合并,指的就是編譯器會(huì)針對(duì)同名的聲明合并為一個(gè)聲明
合并的結(jié)果:
合并后的聲明會(huì)同時(shí)擁有原先兩個(gè)或多個(gè)聲明的特性
疑問:
那這兩個(gè)或多個(gè)具體指的是什么呢?
其實(shí)得分幾種情況講,今天要講的就是其中一種,最簡(jiǎn)單也最常見的聲明合并類型是接口合并
我們剛剛說了,“合并后的聲明會(huì)同時(shí)擁有原先兩個(gè)或多個(gè)聲明的特性”
接口的合并也是一樣,它會(huì)將雙方的成員放到一個(gè)同名的接口里
需要注意的是,接口里面的成員有函數(shù)成員和非函數(shù)成員,情況有所不一樣
例如:
interface Box { height: number; } interface Box { width: number; } let box: Box = {height: 2, width: 3};
上述代碼中,定義了兩個(gè)名字都為Box
的同名接口(實(shí)際開發(fā)中,可能來源于不同的文件),最終里面的東西會(huì)混合在一起
但是需要注意,以上情況里頭的成員都是唯一的,但如果兩個(gè)接口中同時(shí)聲明了同名的非函數(shù)成員且它們的類型不同,則編譯器會(huì)報(bào)錯(cuò)
而對(duì)于里頭的函數(shù)成員來說,每個(gè)同名函數(shù)聲明都會(huì)被當(dāng)成這個(gè)函數(shù)的一個(gè)重載。而且當(dāng)接口 A與后來的接口 A合并時(shí),后面的接口具有更高的優(yōu)先級(jí)
例如官方的例子:
interface Cloner { clone(animal: Animal): Animal; } interface Cloner { clone(animal: Sheep): Sheep; } interface Cloner { clone(animal: Dog): Dog; clone(animal: Cat): Cat; }
最終會(huì)合并成一個(gè)聲明,如下:
interface Cloner { clone(animal: Dog): Dog; clone(animal: Cat): Cat; clone(animal: Sheep): Sheep; clone(animal: Animal): Animal; }
需要注意兩點(diǎn):
每組接口里的聲明順序不變
各組接口之間的順序是后來的接口重載出現(xiàn)在靠前位置
不過也有例外:當(dāng)出現(xiàn)特殊的函數(shù)簽名時(shí)。 如果簽名里有一個(gè)參數(shù)的類型是單一的字符串字面量(比如,不是字符串字面量的聯(lián)合類型),那么它將會(huì)被提升到重載列表的最頂端
以上是“TS中最常見的聲明合并有哪些”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。