TypeScript中数组和元祖

本文我们讨论下TypeScript中数组和元祖,讨论两者之间的区别以及应用场合。

1. 数组

在TypeScript中数组可以存储元素集合,可以同一类型或不同类型。可以通过两种方式定义数组:

type MyArray = string[];

这里定义了单一数据类型。下面定义包括多种类型数组:

type MyArray = Array<string | number>;

类似的通过下面方式定义数组,通过类型推断,效果与上面一致:

const numberArray = [1, 2, 3, 4, 5];const mixedArray = ['a', 2, 'c'];

这样定义的问题是没法确切知道每个元素的具体类型,无法进一步进行类型检查:

const item = mixedArray[2];

这里item数据类型为string | number,要确定具体类型必须通过typeof进行额外检查。
TypeScript提供了可以定义精确元素类型的方法,下面我们讨论元祖。

2. 元祖

定义元祖的语法如下:

type FixedArray = [string, number, string];

可以给每个元素指定数据类型:

const mixedArray: FixedArray = ['a', 2, 'c'];const first = mixedArray[0]; // string
const second = mixedArray[1]; // number

但有些奇怪的现象需要解释下。这是一个固定长度数组,显示设定每个元素类型,但我们能够访问固定长度之外的元素吗?我们可以,那其数据类型是什么呢?

const fourth = mixedArray[3]; // string | number

我们居然得到了string | number 数据类型。
好吧,如果我们给范围外的元素设置正确的数据类型,然后再赋值,类型可以确定吗?

mixedArray[3] = 4;
const fourth = mixedArray[3]; // string | number

不,我们可以给范围外的元素赋值,但其仍然是已知数组元素类型的混合类型。

因此使用元祖可以确定元素数据类型,但不要超出范围,可以把元祖理解为固定长度,超出范围不能保证其类型。
JavaScript没有元祖类型,最终只能使用JavaScript数组表示元祖,虽然其可以检查你访问的区域,但不能保证其他模块不改变数组的值。

3. 总结

元祖非常有用,但有点疯狂,基于JavaScript的语言怎能不疯狂。
数组一般用于保存相同类型元素集合,元祖可以存储不同类型元素集合,两者都可以作为函数参数。应用时需了解JavaScript的数组特性。

TypeScript中数组和元祖相关推荐

  1. Scala在window上安装及基本概述(变量,数据类型,插值器,条件循环,数组,元祖,集合)

    Scala 一.Scala安装 1.windows安装Scala 2.在idea中使用Scala 3.使用maven创建工程 二.Scala简介 1.Scala概述 2.Scala特点 (1)静态类型 ...

  2. python中列表 字典 元祖 enumerate()函数

    2017-5-29 列表 : [ ] list = [] #定义一个空列表list.append(1) #向列表中添加成员list.count(2) #计算2在列表中出现的次数list.extend( ...

  3. python 列表 元祖 字典 集合_python中列表、元祖、字典和集合

    list 允许重复的集合,是有序的:即元素可以是一样的,也可以修改元素: tuple 允许重复的集合,是有序的:但子元素是不可以修改的 dict   允许重复的集合,是无序的:元素是可以修改的 set ...

  4. 元祖字典 java_元祖和字典

    元祖的定义 Tuple 元祖与列表类似,不同之处在于元祖中 元素不能修改 元祖表示多个元素的序列 元祖在python中,有特定的应用场景 元祖用于存储 一串信息,数据之间用逗号分隔 元祖用 ( ) 定 ...

  5. Python中序列、列表、元祖(数组)、集合、字典

    序列 序列的两个特点:  1.索引操作符,从序列中抓取一个特定项目  2.和切片操作符,获取序列的一个切片,即一部分序列 Python一些内置函数  1.cmp(A, B):比较可为list.tupl ...

  6. 如何在TypeScript中删除数组项?

    本文翻译自:How do I remove an array item in TypeScript? I have an array that I've created in TypeScript a ...

  7. python中的切片能否修改元祖_Python列表的增删改查和元祖

    一.定义列表 1.names = ['mike','mark','candice','laular'] #定义列表 2.num_list = list(range(1,10)) #range生成1-1 ...

  8. python 字典排序 最大键_Python中的列表、元祖、字典、集合操作大全

    来源:http://suo.im/5HPGNT 在Python中有4种内建的数据结构:列表.元组.字典.集合.今天我们将会学习如何使用它们,以及它们如何使编程变得简单. 一.列表list 是处理一组有 ...

  9. python字典、列表、元祖使用场景_python学习第七讲,python中的数据类型,列表,元祖,字典,之元祖使用与介绍...

    python学习第七讲,python中的数据类型,列表,元祖,字典,之元祖使用与介绍 一丶元祖 1.元祖简介 元祖跟列表类似.只不过是有区别的. 如下: tuple(元祖英文) 跟列表类似, 元素不能 ...

最新文章

  1. 微信公众号接入图灵机器人实现自动回复消息
  2. 高性能js之js文件的加载与解析
  3. android+notepad教程,Android Sample学习——NotePad
  4. 最近发包给朋友,搞定软件小活儿、解决小功能模块的感受
  5. 欧框语言框架标准C2,CEFR欧洲语言共同参考框架
  6. Linux常用命令(第二版) --文件管理命令
  7. Spring Boot集成ShedLock分布式定时任务实例
  8. mysql crud_如何使用Laravel和MySQL构建您的第一个CRUD应用
  9. pydicom 显示jpeg压缩图像_解读常见图像格式
  10. Nginx+Tomcat+Memecached实现session共享配置
  11. 第十二章_网络搭建及训练
  12. dw中创建java程序_Java创建对象的过程简介
  13. 简述数字信号处理的内容和理论
  14. 电脑录屏软件哪个好用,分享4款电脑录制视频清晰软件
  15. js 中 spilt 方法
  16. 一口气带你学会Redis升级后的几种数据类型,效率daydayup
  17. Java 开发中遇到的印象深刻的问题
  18. jupyter lab版本更新问题
  19. cdn投资骗收租_为研究直播的投资点,才意识到CDN对内容分发的基础性意义。迟到3年才看到这一点,错过20倍的网宿科技...
  20. [BZOJ4668]冷战

热门文章

  1. 屡破记录!国产数据库何以后来居上?
  2. Stable Diffusion10
  3. IDEA Out of memory 问题
  4. 三八妇女节快乐----IT女神活动随笔
  5. 长沙理工计算机竞赛黑马,从“清北摇篮”到学科竞赛全国200强,安居育才成为最大黑马!...
  6. 360Email:会员邮件营销取胜要点总结
  7. ae等高线_Topograph脚本下载-AE视频高度图地形等高线轮廓脚本Topograph下载v1.0 免费版-西西软件下载...
  8. TensorRT之条件控制
  9. C语言:小球从100米的地方下落,求第10次反弹高度,前10次落地总高度
  10. 全方位揭秘!大数据从0到1的完美落地之Hive分区