TypeScript 能手养成之旅 Day 8 物件型别-扩充型别-元组(Tuple)

前言

今天要来介绍,Typescript 特有的类型 TupleEnum,到底会是什麽,有趣的地方会是哪些呢?

元组(Tuple)

初步看到 Tuple 时,觉得这不就是 Array 吗?心里暗自窃喜了一下,不过 JavaScript 就有 Array 了,为何 TypeScript 还要新增一个呢? 但相较下去发现,原来没那麽单纯,如下

正常我们在定义 Array 会是这样

let testArray: (number | string)[];
testArray = ['CY', 28]

console.log(testArray) // ['CY', 28]

但是如果是用 Tuple,会有以下的状况

当我们定义好型别,预设值给与空阵列时,TypeScript 就会进一步提醒我们,不能这样做,哇~第一步就给个震撼弹!

let testArray: [number, string] = [];

接下来赋值,第一个元素给予字串,再次得到 TypeScript 的关爱。

let testArray: [number, string];
testArray = ['28', 'CY']

有发现了什麽吗?

没有错,Tuple 相较 Array 更加严格,因此不管是型别或者是位子都必须按照当初注解的规则走,很强硬,但是对需要带入固定元素的阵列,起了一个很大的保护。

使用阵列方法

有没有觉得 TupleArray 很像,只是比较严格一点,再来一发好消息,就是也可以使用 Array 的方法,例如 pushconcat 等。

我们试着使用 push

let testArray: [number, string] = [28, 'CY'];
testArray.push('will', 26)

console.log(testArray) //[ 28, 'CY', 'will', 26 ]

这边发现如果是用 push 是可以将元素直接添加进去,而不会报错,但是直接赋值是必须按照一开始注记的型别和元素数量规则走。

结语

复习一下,阵列和元组的差别。

阵列 => 只要符合一开始的元素型注记的规则,例如:let test: (string|number),元素就必须是 stringnumber,其余元素的数量和顺序就没有限制。

元组 => 必须元素数量固定,每个元素型别也要完全一样。

今天到此,明天将带来另一个扩充型别 列举(Enum),期待明日~


<<:  Day10. 人与人之间偶有摩擦,物体与物体之间叫做碰撞 - Collision(上)

>>:  [Day10] 以深度学习进行时间序列预测 — 概论

卡夫卡的藏书阁【Book5】- Kafka 安装与基本设定

“I am a cage, in search of a bird.” ― Franz Kafka...

Day29 Plugin 从零开始到上架 - 上架

官方文件 完成我们Plugin 的功能後,我们要建立一些文件,之後upload 至pub.dev 後...

Day41. 备忘录模式

本文同步更新於blog Memento Pattern 透过对象外的存档,让对象能够载入之前的状态...

Flutter API Get using Bloc state management and http plugin

Flutter API Get using Bloc state management and ht...

Youtube Data API 教学 - 频道资料我都要 search.list

「鲑鱼均,因为一场鲑鱼之乱被主管称为鲑鱼世代,广义来说以年龄和脸蛋分类的话这应该算是一种 KNN 的...