上一篇我们提到了在typescript中对于对象的定义和使用,俗话说"万物皆对象",这里我们就来说一下另一个特别的对象---数组。

在网上有很多对于数组的定义,例如:数组对象是使用单独的变量名来存储一系列的值,简单理解,我们可以说数组就是一组或者说是一系列数据的集合。

我们都知道,数组是我们在使用JavaScript开发中用到最多的类型之一,在JavaScript中,数组有以下两个主要特点:

  • 数组内的数据可以是任意类型数据;

  • 数组的长度没有任何限制;

在JavaScript中我们有以下常见的三种方式来定义数组:

// 方式1
var array = new Array();
array[0] = 1;
array[1] = 'string';
...// 方式2
var array = new Array(1,'string');// 方式3
var array = [1, 'string'];

在JavaScript中还有很多对于数组的操作方法,这里我就不多赘述了,前面的博客中我有写关于数组和对象遍历的一些方法,有兴趣的话可以查看交流一下(常见的遍历数组和对象的方法);

说了那么多,我们现在来进入正题,那就是在typescript中,我们是如何来定义及使用数组的。

(1)第一种方式:类型 + []表示法

let array : number[] = [1, 2, 3];

需要注意的是,我们这里定义的方式,是不是跟之前的数据类型定义相似,均以冒号相隔,既然定义的方式二者类似,那么有些特性自然也就相似,那就是这种定义方式,限制了你要定义的数组中数据的数据类型,也就是说,我们上面定义的array : number[],就表明在创建的数组array中,里面的数据类型只能是number类型或者是number类型的子类型,不允许有其它数据类型的数据存在,不然TS编译会报错。当然了,我们定义联合类型数组,这样就可以允许数组内存在我们想要的数据类型的数据,如下:

let array: (number | string)[] = [1, 2, 3, 'string']; // 允许数值和字符串类型

(2)第二种方式:接口

interface array {[index: number]: number
}
let arr: array = [1, 2, 3, 4, 5];

因为万物皆对象,所以我们也可以以定义对象的方式来定义数组。

在接口的定义方式中,我们可以看到我们使用了两个冒号的定义方式,从字面意思理解,也就是这个数组对象的类型中索引index值的数据类型是数值类型,同时数组内数据的数据类型也是数值类型。为什么我们要这样定义呢?来看以下代码:

interface array {[index: number]: number
}
let arr: array = [1, 2, 3, 4, '5'];// 编译报错:Type 'string' is not assignable to type 'number'.

当我们限制了数据类型时,就不允许其它的数据类型进来了,同样,我们可以联合定义:

interface array {[index: number]: number | string
}
let arr: array = [1, 2, 3, 4, '5'];

但是使用接口定义数组的方法,在开发中用的是极少的,因为过程比较繁琐,下面的一种方式就是最常用的了。

(3)第三种方式:any

let arr: any[] = [1, 2, 3, 4, '5'];

方式三同样是利用了数据类型定义的特点,any也就是任意数组类型,所以我们可以在定义的数组中添加任意数据类型,这也是最常用的一种方式。

定义的方式我们说完了,下面介绍以下在JavaScript中常用的一些数组操作方式是如何在typescript中使用的:

// push,pull,shift,unshift
let arr: number[] = [1, 2, 3];
arr.push(4);  // 可以编译
arr.push('string');  // 编译报错:Argument of type '"string"' is not assignable to parameter of type 'number'.

我们可以看到,当定义好数组内的数据类型时,我们使用push ,pull ,shift ,unshift时,添加及删除的数据必须跟定义好的数据类型保持一致。

// concat的使用
let arr;
let arr_1: number[] = [1, 2, 3];
let arr_2: string[] = ['a', 'b', 'c'];
arr = arr_1.concat(arr_2); // 执行编译命令报错:'string[]' is not assignable to parameter of type 'ConcatArray<number>'let arr;
let arr_1: number[] = [1, 2, 3];
let arr_2: number[] = [4, 5, 6];
arr = arr_1.concat(arr_2); // 执行编译指令成功

上述代码中是concat的使用方式,可以看到当我们将两个不同数据类型的数组进行拼接时,TS编译就会报错,所以我们可以理解为不同的两个数据类型的数组是不能执行拼接操作的。

到底啦!!!!!!!!!!!!!!!!

TypeScript学习(五):数组的定义方式及常见数组操作方法使用相关推荐

  1. Java数组的定义方式有哪几种

    今天动力节点java培训机构小编为大家分享Java数组的定义方式有哪几种,希望通过此文,大家能够熟知java数组的定义方式,下面就是小编一起看看Java数组的定义方式有哪几种呢? Java数组定义方式 ...

  2. Java静态数组和动态数组的定义方式

    数组的定义方式 静态: //简化语法常用 定义和初始化同步完成 int [] a = {5,2,6,4,10}; 动态: //数组的定义和初始化同时完成,使用动态初始化语法 int[] prices ...

  3. Java数组怎么定义?java中数组的定义及使用方法

    许多初学者不知道如何定义java中数组,下面我就为大家带来一篇java中数组的定义及使用方法.应该可以解决大部分人的需求,现在就分享给大家,也给大家做个参考. 数组:是一组相关变量的集合 数组是一组相 ...

  4. C语言结构体数组,结构体数组的定义,结构体数组的输出,结构体的应用

    结构体数组 结构体数组的定义: 结构体数组格式:声明变量类型 数组名称[数组长度] //定义一个结构体数组名为a,它里面包含有5个元素,每一个元素都是一个结构体变量 Wor a[5]={}; #inc ...

  5. C语言 二维数组的定义、初始化以及数组元素的引用

    二维数组定义的一般形式为: 类型说明符 数组名[常量表达式 ][常量表达式] 例如:float a[3][4],b[5][10]; 是定义a为3行4列的数组,b为5行10列的数组. 注意不可以写成fl ...

  6. c语言中的一维数组的定义,C语言一维数组的定义和引用

    <C语言一维数组的定义和引用>由会员分享,可在线阅读,更多相关<C语言一维数组的定义和引用(5页珍藏版)>请在人人文库网上搜索. 1.C语言一维数组的定义和引用在程序设计中,为 ...

  7. java定义数组_java中数组的三种定义方式_java中数组的定义及使用方法(推荐)...

    java中数组的三种定义方式 java中,数组是一种很常用的工具,今天我们来说说数组怎么定义 [java] view plain copy /** * 数组的三种定义方法 * 1.数组类型[] 数组名 ...

  8. C语言数组与指针、数组的定义方式

    文章目录 前言 一.数组与指针的关系 二.C中的指针 如何定义指针呢? 三.如何用指针表示数组: 如何用指针表示数组呢? 总结 前言 楼主大一的时候学过一点C语言,但是之后一直没有用,最近用到了发现有 ...

  9. c语言大数组怎么定义,C语言中数组定义方式

    一.数组简介 <1>前言 大家首先来思考一个问题,若是我们想要定义两个变量,求这两个数的平均数,该怎么求呢? 例如:int a = 10,b = 20 int average = (a + ...

最新文章

  1. 聊一聊 Spring 中的线程安全性
  2. 关于System Volume Information占用的大量磁盘空间
  3. RabbitMQ简单队列模式
  4. log4j.appender.stdout.layout.ConversionPattern
  5. linux find 命令详解
  6. 【转】如何使用瑞萨E10A调试SH系列不带片内FLASH的单片机
  7. Vim自动补全插件-NeoComplCache
  8. 两万字详解MongoDB从入门到精通
  9. linux --- 启动过程
  10. 【语言-c#】身份证地址编码列表
  11. C语言题目:输入角度a,输出a的正弦值(sin a)
  12. 长白山沟谷地带珍贵药材选址设计实习
  13. Keytool命令详解
  14. 大数据平台核心架构图鉴,建议收藏!
  15. php使用 163邮箱接口,G. PHP发送邮件功能实现(使用163邮箱)
  16. 终于等到你:国内黑客团队360Vulcan公布iOS 12.1越狱漏洞细节
  17. Mathematica最简教程
  18. 实现财务自由 之 美股上市公司的年报(年度财报)(国内外公司年报20-F,10-k)查阅、下载、以及 翻译中文查阅、下载的方法
  19. 如何配置NATAPP
  20. 电脑打不开浏览器--解决方法

热门文章

  1. 关于CoreData的使用
  2. OLE-只读性质的EXCEL
  3. MVC3中输出Html标签的方法
  4. 类HTML语法显示格式化文本
  5. jQuery知识(转)
  6. 25款.NET开发工具
  7. linux shell脚本监控进程崩溃自动重启
  8. Excel 公式 ・快捷键 ------- 不定期更新
  9. 【Python】AxisError: axis 0 is out of bounds for array of dimension 0
  10. IDEA使用@Data注解,类调用get、set方法标红的解决办法