TypeScript名稱空間合併講解
阿新 • • 發佈:2021-12-31
目錄
- 同名的名稱空間之間的合併
- 名稱空間和其他型別的合併
- 合併同名的名稱空間和類
- 合併同名的名稱空間和函式
- 同名的名稱空間和列舉
前言:
回顧上一節的內容,在上一節中我們介紹了TS中最常見的宣告合併:介面合併
我們從中瞭解了宣告合併其實指的就是編譯器會針對同名的宣告合併為一個宣告,合併的結果是合併後的宣告會同時擁有原先兩個或多個宣告的特性
而介面合併的合並需要裡面的成員是否有函式成員。對於裡頭的函式成員來說,每個同名函式宣告都會被當成這個函式的一個過載,當介面 A與後來的介面 A合併時,後面的介面具有更高的優先順序
今天要講的內容也是TS中的宣告合併,但這次是名稱空間相關的合併
主要分兩方面來講,一是同名的名稱空間之間的合併,二是名稱空間和其他型別的合併。下面會一一講述
同名的名稱空間之間的合併
與介面合併相類似,兩個或多個同名的名稱空間也會合並其成員
那具體怎麼合併呢?
對於同名的名稱空間之間的合併,記住一下4點:
- 裡頭模組匯出的同名介面會合併為一個介面
- 對於非匯出成員,僅在其原有的(合併前的)名稱空間內可見。也就是說合並之後,從其它命名客棧空間合併進來的成員無法訪問非匯出成員
- 對於裡頭值的合併,如果裡頭值的名字相同,那麼後來的名稱空間的值會優先順序會更高
- 對於沒有衝突的成員,會直接混入
例如:
namespace Animals { export class Cat { } } namespace Animals { export interface Legged { numberOfLegs:程式設計客棧number; } export class Dog { } }
等同於:
namespace Animals { export interface Legged { numberOfLegs: number; } export class Cat { } export class Dog { } }
上述例子中,兩個同名的名稱空間Animals
,最終合併為一個名稱空間,而且結果是三個沒有衝突的東西,直接混合在一起了
名稱空間和其他型別的合併
名稱空間可以與其它型別的宣告進行合併,比如與類和函式,比如和列舉型別
合併同名的名稱空間和類
例如:
class Album { label: Album.AlbumLabel; } namespace Album { export class AlbumLabel { }//匯出 `AlbumLabel`類,好讓合併的類能訪問 }
名稱空間和類的合併,結果是一個類並帶有一個內部類
合併同名的名稱空間和函式
除了上述的內部類的模式,你在裡,建立一個函式稍後擴充套件它增加一些屬性也是很常見的。
TypeScript
使用宣告合併來達到這個目的並保證型別安全
例如官方的一個例子:
function buildLabel(name: string): string {
return buildLabel.prefix + name + buildLabel.su程式設計客棧ffix;
}
namespace buildLabel {
export let suffix = "";
export let prefix = "Hello,";
}
console.log(buildLabel("Sam Smith"));
同名的名稱空間和列舉
可以用來擴充套件列舉,還是看官方給的例子吧
enum Color { red = 1,green = 2,blue = 4 } namespace Color { export function mixColor(colorName: string) { if (colorName == "yellow") { return Color.red + Color.green; } else if (colorName == "white") { return Color.red + Color.green + Color.blue; } else if (colorName == "magenta") { return Color.red + Color.blue; } else if (colorName == "cyan") { return Color.green + Color.blue; RNZKApwwN } } }
注意:
並不是所有東西都能合併,需要注意:類不能與其它類或變數合併
到此這篇關於TS名稱空間合併講解的文章就介紹到這了,更多相關TS名稱空間合併內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!