TypeScript 元组(Tuple)

本节介绍元组这一数据类型的定义及其使用,通过元组可以存储不同类型的元素,而非像数组那样只能存储相同元素类型(any[] 除外)。

1. 慕课解释

相同类型元素组成成为数组,不同类型元素组成了元组(Tuple)。

2. 定义元组类型

声明一个由 string 和 number 构成的元组:

const list: [string, number] = ['Sherlock', 1887]   // okconst list1: [string, number] = [1887, 'Sherlock']  // error

代码解释: 元组中规定的元素类型顺序必须是完全对照的,而且不能多、不能少,list1 中定义的第一个元素为 string类型,不能赋值为 number类型的数据。

当赋值或访问一个已知索引的元素时,会得到正确的类型:

const list: [string, number] = ['Sherlock', 1887]list[0].substr(1)  // ok
list[1].substr(1)  // Property 'substr' does not exist on type 'number'.

代码解释:

第 3 行,list[0] 是一个字符串类型,拥有 substr() 方法。

第 4 行,list[1] 是一个数字类型,没有 substr() 方法,所以报错。

要注意元组的越界问题,虽然可以越界添加元素(不建议),但是不可越界访问:

const list: [string, number] = ['Sherlock', 1887]
list.push('hello world')console.log(list)      // ok [ 'Sherlock', 1887, 'hello world' ]
console.log(list[2])   // Tuple type '[string, number]' of length '2' has no element at index '2'

代码解释:

第 2 行,向一个声明了只有两个元素的元组继续添加元素,这种操作虽然可行,但是严重不建议!

第 5 行,该元组只有两个元素,不可越界访问第三个元素。

3. 可选元素类型

元组类型允许在元素类型后缀一个 ? 来说明元素是可选的:

const list: [number, string?, boolean?]
list = [10, 'Sherlock', true]
list = [10, 'Sherlock']
list = [10]

代码解释: 可选元素必须在必选元素的后面,也就是如果一个元素后缀了 ?号,其后的所有元素都要后缀 ?号。

4. 元组类型的 Rest 使用

元组可以作为参数传递给函数,函数的 Rest 形参可以定义为元组类型:

declare function rest(...args: [number, string, boolean]): void

等价于:

declare function rest(arg1: number, arg2: string, arg3: boolean): void

TIPS: 在声明文件(.d.ts)中,关键字 declare 表示声明作用。声明文件用于编写第三方类库,通过配置 tsconfig.json 文件中的 declaration 为 true,在编译时可自行生成。

还可以这样:

const list: [number, ...string[]] = [10, 'a', 'b', 'c']const list1: [string, ...number[]] = ['a', 1, 2, 3]

代码解释: Rest 元素指定了元组类型是无限扩展的,可能有零个或多个具有数组元素类型的额外元素。

5. 小结

本小节介绍了元组类型的声明方式和一些技巧,在实际开发中可以灵活应用。

TypeScript 元组(Tuple)相关推荐

  1. java 元组 getinteger_TS数据类型:从C++/Java/Python到TS看元组tuple—元组的来龙去脉...

    在C++有Java这种强类型语言中,常用的Array.List.Set ,在集合中只能是一种类型(可以复习下:<再谈Java数据结构-分析底层实现与应用注意事项). int data[] = n ...

  2. 第六节:又一种新的数据类型:元组Tuple

    每次发布招聘推文都会被喷薪资太低,招不到人.上周的发布react开发的招聘,居然没有人喷薪资太低了,突然有点不习惯. 摊手+无辜脸.jpg 招聘先放一边,继续回来学习我们的typescript,后续简 ...

  3. c# 元组Tuple

    Tuple类型像一个口袋,在出门前可以把所需的任何东西一股脑地放在里面.您可以将钥匙.驾驶证.便笺簿和钢笔放在口袋里,您的口袋是存放各种东西的收集箱.C# 4.0引入的一个新特性 Tuple类型与口袋 ...

  4. pandas索引复合索引dataframe数据、索引dataframe中指定行和指定列交叉格子的数据内容(getting a specific value)、使用元组tuple表达复合索引的指定行

    pandas索引复合索引dataframe数据.索引dataframe中指定行和指定列交叉格子的数据内容(getting a specific value).使用元组tuple表达复合索引的指定行 目 ...

  5. pandas索引复合索引dataframe数据、索引其中一个水平(level)的所特定数据行、指定数据行(index a row of a level)、使用元组tuple表达复合索引的指定行

    pandas索引复合索引dataframe数据.索引其中一个水平(level)的所特定数据行.指定数据行(index a row of a level).使用元组tuple表达复合索引的指定行 目录

  6. pandas索引复合索引dataframe数据、索引其中多个水平(level)的多个数据行(index rows from different levels)、使用元组tuple表达复合索引的指定行

    pandas索引复合索引dataframe数据.索引其中多个水平(level)的多个数据行(index rows from different levels and combine).使用元组tupl ...

  7. python元组(tuple)使用示例+常用方法+列表(list)和元组(tuple)的异同?

    python元组(tuple)使用示例+常用方法+列表(list)和元组(tuple)的异同? 元组(tuple) # 元组类似列表,元组里面的元素也是进行索引计算. # 列表里面的元素的值可以修改, ...

  8. 元组Tuple、数组Array、映射Map

    一.元组Tuple 元组Tuple是不同类型的值的聚集,元组的值将单个的值包含在圆括号中来构成,元组可以包含一个不同类型的元素 如 val riple = (100, "Scala" ...

  9. 元组tuple类型内置方法

    目录 元组tuple类型内置方法 用途 定义 常用操作+内置方法 优先掌握 存一个值or多个值 有序or无序 可变or不可变 元组tuple类型内置方法 元组是不可变的列表,在定义完成后后面就不可以进 ...

最新文章

  1. gcc:undefined reference to 'std::cout'
  2. python注释_Python的注释用法
  3. Python中numpy库unique函数解析
  4. .net MVC4.0项目发布到阿里云虚拟主机中遇到的问题。
  5. 第4章 变量、作用域和内存问题
  6. 转载 从SRAM中读写一个数据问题——Verilog
  7. 解决linux写入ntfs盘时报错:只读文件系统
  8. 2022最新Spring相关大厂常问技术面试题大全 —— 金三银四好时机
  9. python进阶课程目标 学习内容_Python学习教程(Python学习路线):第九天-面向对象进阶...
  10. 【数据结构】DFS 代码模板
  11. 始于颜值 敬于才华 合于性格 久于善良 终于人品
  12. 优化mac触摸板(Trackpad)使用体验的推荐设置
  13. EasyUI 中combobox利用拼音进行检索
  14. 注册gmail账号,手机无法接受验证码的问题
  15. jsp网站用什么虚拟主机
  16. win10多屏显示时分别设置壁纸
  17. Vue为啥可以成为2019年的一匹黑马?
  18. 西邮校园网路由器教程
  19. D. Colored Rectangles
  20. 有一个背包,容量为m,然后有n个货物,重量分别为w1,w2,w3...wn,每个货物的价值是v1,v2,v3...vn,w和v没有任何关系,请求背包能装下的最大价值...

热门文章

  1. DOS批处理中%cd%和%~dp0的区别
  2. 常用浏览器修改User-Agent的方法
  3. Anaconda安装(ubuntu 14.04.03 LTS 64bit)
  4. 【AI视野·今日Robot 机器人论文速览 第十一期】Mon, 21 Jun 2021
  5. 【今日CV 计算机视觉论文速览】 11 Mar 2019
  6. MxNet 迁移学习实现深度学习分类
  7. 认识进程 java 1615387415
  8. DirectoryInfo类 c# 1614534016
  9. 草稿 断开始datagrewvies 01
  10. 学习日报 1027 自动类型转换 运算符