大家好!昨天介紹了何謂物件型別,還有對物件(object)的基本介紹。今天我們要來聊聊TypeScript(TS)中非常常用到的兩種資料結構:陣列與元組。
如果是以前學過 JavaScript的人,我相信你們對陣列一定不陌生。但在TypeScript裡,TS又將陣列細分為陣列與元組,而兩者間又有甚麼區別呢?
陣列:指一長度不固定、內部元素都是同類型的資料清單。陣列常有的宣告寫法有兩種:
//第一種是最常見的陣列寫法:
let studentName: string[] = ["Amy", "Ruby", "Kevin"];
let passwords: number[] = [123, 456, 789];
//第二種則是陣列泛型(Array<型別>)的寫法:
let subjects: Array<string> = ["國文", "英文", "數學"];
來到今天的大重點:元組(Tuple),一個在JS沒有,只在TS擁有的特別概念。
元組:長度和元素的位置是固定的,但內部元素的型別不一定相同。下面來示範元組的使用方法:
//一開始先定義元組的型別
let studentScores: [string, number];
//正確寫法:順序及型別要符合元組先前的規範
studentScores = ["Henry", 94];
//錯誤寫法:
studentScores = [94, "Henry"]; //順序寫反會讓TS報錯
studentScores = ["Henry"]; //元組長度固定,若是少寫或多寫一個,TS也會報錯
為什麼TS會新增元組的概念?
元組的小例外?
.push()操作,元組還是會增加它的長度,如果要阻止元組的長度增加,就得使用唯讀元組。當我們在寫 React 狀態、Redux,或是開發共用庫時,常需要保證陣列宣告後就不能被意外修改。下面舉例常見寫法:
let roList: readonly number[] = [35, 38, 39];
// 或是寫成 ReadonlyArray<number>的形式
//錯誤寫法:
roList.push(4); // 唯讀型別無法更改陣列,TS會因此報錯
roList = 99; // 唯讀陣列也無法重新賦值,TS會報錯
今天介紹了陣列及元組的不同,以及特別的唯讀陣列,這邊整理成表格供大家參考喔!明天來介紹聯合型別和交叉型別,大家明天見囉!
| 陣列(Array) | 元組(Tuple) | |
|---|---|---|
| 長度 | 長度不固定 | 長度固定 |
| 資料型別 | 同種資料類型 | 可以有不同型別 |
| 應用 | 儲存大量同類型的資料 | 儲存結構固定、有特定對應關係的資料 |