JS TypeScript的Map對象及聯合類型實戰

一.TypeScript的Map對象

類型腳本映射對象。 map對象保存鍵值對,可以記住鍵的原始插入順序。任何值(對象或原始值)都可以用作鍵或值。Map是ES6中引入的新數據結構。

Typescript使用地圖類型和new關鍵字創建Map:

let myMap = new Map();

初始化映射,可以以數組的形式傳入鍵值對:

let myMap = new Map([
        ["key1", "value1"],
        ["key2", "value2"]
    ]); 

Map對象相關功能和屬性:

  • MapClear()–刪除映射對象的所有鍵/值對。
  • MapSet()–設置鍵值對並返回映射對象。
  • MapGet()–返回與鍵對應的值。如果不存在,則返回undefined。
  • MapHas()–返回一個佈爾值,用於確定映射是否包含與鍵對應的值。
  • MapDelete()–刪除映射中的元素,如果刪除成功則返回true,如果刪除失敗則返回false。
  • MapSize–返回映射對象鍵/值對的數目。
  • MapKeys()-返回一個迭代器對象,其中包含map對象中每個元素的鍵。
  • MapValues()–返回一個新的迭代器對象,其中包含map對象中每個元素的值。
let nameSiteMapping = new Map();

設置 Map 對象

nameSiteMapping.set("Google", 1);
nameSiteMapping.set("Runoob", 2);
nameSiteMapping.set("Taobao", 3);

獲取鍵對應的值

console.log(nameSiteMapping.get("Runoob"));

判斷 Map 中是否包含鍵對應的值

console.log(nameSiteMapping.has("Taobao"));   
console.log(nameSiteMapping.has("Zhihu"));  

返回 Map 對象鍵/值對的數量

console.log(nameSiteMapping.size);

刪除 Runoob

console.log(nameSiteMapping.delete("Runoob"));  
console.log(nameSiteMapping);

移除 Map 對象的所有鍵/值對 , 清除 Map

nameSiteMapping.clear();           
console.log(nameSiteMapping);

使用 es6 編譯:

tsc --target es6 test.ts

執行上述JavaScript代碼,輸出結果為:

2
true
false
3
true
Map { 'Google' => 1, 'Taobao' => 3 }
Map {}

1.1迭代 Map

地圖對象中的元素按順序插入。我們可以迭代map對象,每次迭代都返回[key,value]數組。

Typescript用於…Of來實現迭代:

let nameSiteMapping = new Map();
 
nameSiteMapping.set("Google", 1);
nameSiteMapping.set("Runoob", 2);
nameSiteMapping.set("Taobao", 3);

迭代 Map 中的 key

for (let key of nameSiteMapping.keys()) {
    console.log(key);                  
}

迭代 Map 中的 value

for (let value of nameSiteMapping.values()) {
    console.log(value);                 
}

迭代 Map 中的 key => value

for (let entry of nameSiteMapping.entries()) {
    console.log(entry[0], entry[1]);   
}

使用對象解析

for (let [key, value] of nameSiteMapping) {
    console.log(key, value);            
}

二.TypeScript 聯合類型

聯合類型可以通過管道(|)將變量設置為多種類型。指定值時,可以根據設置的類型指定值。 註意:隻能指定類型。如果分配瞭其他類型,將報告錯誤。

創建聯合類型的語法格式如下:

Type1|Type2|Type3

聲明一個聯合類型:

var val:string|number 
val = 12 
console.log("數字為 "+ val) 
val = "Runoob" 
console.log("字符串為 " + val)

編譯上述代碼以獲得以下JavaScript代碼:

var val;
val = 12;
console.log("數字為 " + val);
val = "Runoob";
console.log("字符串為 " + val);

數字為 12 字符串為 Runoob

function disp(name:string|string[]) { 
        if(typeof name == "string") { 
                console.log(name) 
        } else { 
                var i; 
                for(i = 0;i<name.length;i++) { 
                console.log(name[i])
                } 
        } 
} 
disp("Runoob") 
console.log("輸出數組....") 
disp(["Runoob","Google","Taobao","Facebook"])

上述代碼輸出結果為:

Runoob 輸出數組…. Runoob Google Taobao Facebook

2.1擴展知識

對於聯合類型數據,主要擴展瞭以下幾點。 隻能訪問公共屬性或方法 通常,使用關節類型是因為無法確定變量最終值的類型。 對於聯合類型的變量或參數,如果無法確定其特定類型,則隻能訪問聯合類型中所有類型通用的屬性或方法。如果訪問特定類型特有的屬性或方法,將生成錯誤。

function sayRes(res: number | string) {
    if (res.length > 0) { // Error: 類型“number”上不存在屬性“length”。
    }
}

2.2總結

  • 聯合類型包含所有可能的變量類型;
  • 分配除聯合類型變量之外的值將產生錯誤;
  • 在無法確定聯合類型變量的最終類型之前,隻能訪問聯合類型通用的屬性和方法。

到此這篇關於JS TypeScript的Map對象及聯合類型實戰的文章就介紹到這瞭,更多相關JS Map對象 內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: