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!