[TypeScript]3.認識物件型別

文、意如

TypeScript系列:
1.TypeScript初探篇
2.認識原始資料型別
[本篇]3.認識物件型別
4.TypeScript物件導向-類別(Class)的使用方式
5.TypeScript物件導向-介面(Interface)的使用方式
JavaScript的型別有兩種,分成原始資料型別(Primitive data types)與物件型別(Object types),
原始資料型別介紹請參閱上一篇,本篇即將介紹物件型別與其它常見的型別。
任務一:認識物件型別(Object types)
  1-1:認識物件
  1-2:修改物件型別中的值
  1-3:物件可當參數傳遞
任務二:認識鴨子類型(Duck Typing)
任務三:其它常見的資料類型
  3-1:認識Map
  3-2:認識Set
  3-3:認識Tuple元組
任務一:認識物件型別(Object types)
1-1:認識物件

物件是由鍵(key)與值(value)組成。值可以是字串、數值、函數、陣列、物件等。

var myobject = {
    key1: "mydata", // 字串
    key2: 123,  //整數
    key3: function() {// 函數
        console.log("ABC");
        return "BCD"
    },
    key4:["arr1", "arr2"] //陣列
}
//物件
console.log(myobject)
/*{
  key1: 'mydata',
  key2: 123,
  key3: [Function: key3],
  key4: [ 'arr1', 'arr2' ]
} */

//物件中的值
console.log(myobject.key1) //mydata
//物件中的函數
console.log(myobject.key3())//ABC BCD//

 

 

 

 

1-2:修改物件型別中的值

注意修改的資料值要與物件中的型別一樣

//物件
var myinfo = {
    city: "台北",
    memberid: 123,
    mydata: function () { }
};
//修改物件值
myinfo.city = "高雄"; //資料要與物件中的型別一致
myinfo.memberid = 999;
//修改屬性值
myinfo.mydata = function () {
    console.log("Hello:" + myinfo.city); //hello 高雄
    console.log("Memeber:"+myinfo.memberid);//Member:999
};
//呼叫物件中的函數
myinfo.mydata();

 

 

 

 

1-3:物件可當參數傳遞

物件也可以當作一個參數傳遞給函數Function

var fruit = {
    fruit1: "Apple",
    fruit2: "Kiwi",
};
var buy = function (obj: { fruit1: string, fruit2: string }) {
    console.log("水果1 : " + obj.fruit1);//水果1 :Apple
    console.log("水果2 : " + obj.fruit2);//水果2 :Kiwi
}
buy(fruit);

 

 

 

 

任務二:認識鴨子類型(DuckTyping)

鴨子類型是動態類型的一種,也是多態(polymorphism)的一種。

//鴨子類型DcukTyping
interface ISize {
    width: number
    height: number
}
//(代入參數型別):return型別
function addPoints(box1: ISize, box2: ISize): ISize {
    var w = box1.width + box2.width
    var h = box1.height + box2.height
    return { width: w, height: h }
}
//呼叫型別並把參數代入
var newPoint = addPoints(
    { width: 10, height: 35 },
    { width: 25, height: 41 }
)
console.log(newPoint); //{ width: 35, height: 76 }
export { }; //使用 ES Module

 

 

 

 

任務三:其它常見的資料類型
3-1:認識Map

Map是ES6中新引入的一種新的類型,使用鍵(Key)值(Value)儲存資料

任何值都可以作為鍵(Key)或一個值(Value)。

使用 Map類型時需要使用new 來建立Map資料

//MAP 類型
var myMap = new Map([
    ["key1", "value1"],
    ["key2", "value2"]
]);

console.log(myMap);//Map(2) { 'key1' => 'value1', 'key2' => 'value2' }

 

 

 

 

因Map 是 ES6 中新引入的一種新的類型,編譯時需要使用es6來編譯

指令:tsc - -target es6 t4.ts

執行:node t4.js

//Map常用函數及屬性
var mycitymapping = new Map();
//設定 Map鍵(key)值(value)
mycitymapping.set("台北", 1);
mycitymapping.set("新竹", 2);
mycitymapping.set("高雄", 3);
console.log(mycitymapping);//Map(3) { '台北' => 1, '新竹' => 2, '高雄' => 3 }
//抓取對應的value
console.log(mycitymapping.get("高雄"));// 3
//判斷是否有該鍵(key)
console.log(mycitymapping.has("新竹"));// true
console.log(mycitymapping.has("宜蘭"));// false
//Map大小
console.log(mycitymapping.size);// 3
//删除高雄
console.log(mycitymapping.delete("高雄"));// true
console.log(mycitymapping);//Map(2) { '台北' => 1, '新竹' => 2}
//移除 Map
mycitymapping.clear();
console.log(mycitymapping);//{}
3-2:認識Set

Set 陣列值是唯一不重複

//set
var mySet  = new Set ( [ 1 , 2 , 2 , 4 , 4 ] ) ;
console.log(mySet);//Set(3) { 1, 2, 4 }

 

 

 

 

3-3:認識Tuple元組

陣列中資料通常來說類型是一樣的,如果需要存取的類型不同,就需要使用Tuple元組,也可以做為參數傳給函數。

//元組資料可以儲存不同類型
var mytuple = ["John",32];
console.log(mytuple)//[ 'John', 32 ]
console.log(mytuple[0])//John
console.log(mytuple[1])//32
console.log("長度:"+mytuple.length)//2
mytuple.push("ABC")//新增一個元素
console.log(mytuple)//[ 'John', 32, 'ABC' ]
console.log(mytuple.pop()+" 刪除了")//刪除最後元素
console.log(mytuple)//[ 'John', 32 ]
mytuple[0] = "Mary"//更新元素
console.log(mytuple)//[ 'Mary', 32 ]

 

 

 

Yiru@Studio - 關於我 - 意如