TypeScript
語言中,數組中的元素通常只能是由相同數據類型組成(any[]
除外),若是咱們想要存儲不一樣類型的元素,則可使用元組。數組
TypeScript
中的元組(Tuple)從外形上來看和數組相差很少, 可是元組中容許存儲不一樣類型的元素,數組中的元素必須是相同的類型。url
聲明元組
聲明元組的語法:.net
let tuple_name = [value1,value2,value3,…value n]
示例:
例如聲明一個由數字類型、字符串類型、布爾類型構成的元素:code
let tup1:[number, string, boolean] = [1, 'a', true]; console.log(tup1);
編譯成 JavaScript
代碼:blog
var tup1 = [1, 'a', true]; console.log(tup1); // [ 1, 'a', true ]
輸出:索引
[ 1, 'a', true ]
這樣聲明的元組,元素的類型必須一一對應,例如右邊中括號內第一個元素必須是 number
類型的數據, 第二個元素必須是 string
類型的數據,第三個必須是 boolean
類型,若是沒有一一對應,則會報錯。ip
示例:
下圖中是一段示例代碼,當元素與對應位置的數據類型沒有一一對應,會產生錯誤: element
訪問元組
和數組同樣,元組中元素也可使用索引來訪問,元組中的索引值一樣從 0 開始,第一個元素爲 0,第二個爲 1,以此類推第 n
個爲 n-1
。字符串
示例:
經過索引訪問一個元素時,能夠獲得這個元素的值:get
let tup1: [string, number, number] = ['xkd', 1, 3]; console.log("第三個元素的值爲:" + tup1[2]); console.log("第三個元素的類型爲:" + typeof tup1[2]);
編譯爲 JavaScript
代碼:
var tup1 = ['xkd', 1, 3]; console.log("第三個元素的值爲:" + tup1[2]); console.log("第三個元素的類型爲:" + typeof tup1[2]);
輸出:
第三個元素的值爲:3 第三個元素的類型爲:number
須要注意的是,在訪問元組中的元素時,不能夠越界訪問。例如上面數組中只有三個元素,那麼若是咱們訪問索引爲 3 的元素:
let tup1: [string, number, number] = ['xkd', 1, 3]; console.log(tup1[3]);
輸出:
Tuple type '[string, number, number]' of length '3' has no element at index '3'.
可選元素類型
咱們在聲明一個元組時,能夠在元素類型後綴一個問號 ?
來講明元素是可選的。
示例:
下面元組中,第二個元素和第三個元素爲可選元素:
let tup1: [string, number?, number?]; tup1 = ['a']; tup1 = ['a', 1]; tup1 = ['a', 1, 3]
有一點很重要,就是可選元素類型必須在必選元素類型後面。也就是說,若是一個元素類型後面後綴了一個問號 ?
,那麼這個元素以後的全部元素類型都要後綴一個問號。
示例:
下圖中第二個元素爲可選元素,第三個元素若是不是可選元素,就會致使報錯:
元組操做
TypeScript
中元組也支持各類操做,例如咱們可使用 push()
方法向元組添加元素,使用pop()
方法移除元組中的最後一個元素。其實使用起來就和數組中相似。
示例:
首先聲明一個元組:
let mytup:[number, number, string, string] = [7, 36, 'summer', 'xkd'];
而後咱們可使用 push()
方法向這個元組中添加新的元素(建議最好不要這樣作),以下所示:
let mytup:[number, number, string, string] = [7, 36, 'summer', 'xkd']; mytup.push('mark'); console.log(mytup); // 輸出:[ 7, 36, 'summer', 'xkd', 'mark' ]
也可使用 pop()
方法刪除元組中最後一個元素:
mytup.pop(); console.log(mytup); // 輸出:[ 7, 36, 'summer' ]
更新或修改元組元素
元組是可變的,這表示咱們能夠更新或更改元組中的元素值,要修改元組中的元素,須要用到索引和賦值運算符 =
。
示例:
例如將元組中索引爲 1 的元素值修改成'aaa':
let mytup:[number, string] = [7, 'xkd']; mytup[1] = 'aaa'; console.log(mytup);
編譯成 JavaScript 代碼:
var mytup = [7, 'xkd']; mytup[1] = 'aaa'; console.log(mytup);
輸出:
[ 7, 'aaa' ]
解構元組
咱們能夠解構元組中的元素,例如:
let mytup:[number, string, boolean] = [7, 'summer', true]; let [a, b, c] = mytup; console.log(a); console.log(b); console.log(c);
編譯成 JavaScript 代碼:
var mytup = [7, 'summer', true]; var a = mytup[0], b = mytup[1], c = mytup[2]; console.log(a); console.log(b); console.log(c);
輸出:
7 summer true
若是咱們不須要解構元組中的所有元素,就能夠像下面這樣解構:
let mytup:[number, string, boolean] = [7, 'summer', true]; let [a, ...arg] = mytup; console.log(a); console.log(arg);
編譯成 JavaScript 代碼:
var mytup = [7, 'summer', true]; var a = mytup[0], arg = mytup.slice(1); console.log(a); console.log(arg);
輸出:
7 [ 'summer', true ]
動手練習
- 請定義一個元組,這個元組中第一個元素爲字符串類型,第二個元素爲布爾類型,第三個元素爲可選的數字類型?
- 請將下面這個元組中第三個元素的值修改成 「可樂」?
let mytup: [string, number, string, boolean] = ['牛肉', 100, '雪碧', true];