少侠们,今天我们继续来搞一搞TS

今天我们要来看一看TS中数组的定义是个什么鬼样子

数组的类型:

在 TypeScript 中,数组类型有多种定义方式,比较灵活。下面我们来看看有哪些定义方法

  「类型 + 方括号」表示法:

    最简单的方法是使用「类型 + 方括号」来表示数组:  

let  tsArray: number[] = [,,,,]

    数组中的项中不允许出现其他类型

let fibonacci: number[] = [, '', , , ];

// index.ts(1,5): error TS2322: Type '(number | string)[]' is not assignable to type 'number[]'.
// Type 'number | string' is not assignable to type 'number'.
// Type 'string' is not assignable to type 'number'.

    上例中,[1, '1', 2, 3, 5] 的类型被推断为 (number | string)[],这是联合类型和数组的结合。

    数组的一些方法的参数也会根据数组在定义时约定的类型进行限制:

let fibonacci: number[] = [, , , , ];
fibonacci.push(''); // index.ts(2,16): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.

    上例中,push 方法只允许传入 number 类型的参数,但是却传了一个 string 类型的参数,所以报错了。  

  数组泛型:  

    也可以使用数组泛型(Array Generic) Array<elemType> 来表示数组:  

let fibonacci: Array<number> = [, , , , ];

    关于泛型,大家可以先仔细学习一下,后面我们也会学到

  用接口表示数组:

interface NumberArray {
[index:number]: number;
}
let fibonacci: NumberArray = [,,,,]

    NumberArray 表示:只要 index 的类型是 number,那么值的类型必须是 number

  any 在数组中的应用

    一个比较常见的做法是,用 any 表示数组中允许出现任意类型:

let list: any[] = ['Xcat Liu', , { website: 'http://xcatliu.com' }];

  类数组(特别注意)

    类数组(Array-like Object)不是数组类型,比如 arguments

function sum() {
let args: number[] = arguments;
} // index.ts(2,7): error TS2322: Type 'IArguments' is not assignable to type 'number[]'.
// Property 'push' is missing in type 'IArguments'.

    事实上常见的类数组都有自己的接口定义,如 IArgumentsNodeListHTMLCollection 等:

function sum() {
let args: IArguments = arguments;
}

好了,以上就是TS里面的数组类型

参考文章:https://github.com/xcatliu/typescript-tutorial/blob/master/basics/type-of-array.md

TS学习随笔(四)->数组的类型的更多相关文章

  1. javascript学习笔记(四) Number 数字类型

    数字格式化方法toFixed().toExponential().toPrecision(),三个方法都四舍五入 toFixed() 方法指定小数位个数  toExponential() 方法 用科学 ...

  2. TS学习随笔(五)->函数

    这篇文章我们来看一下TS里面的函数 函数声明 在 JavaScript 中,有两种常见的定义函数的方式——函数声明(Function Declaration)和函数表达式(Function Expre ...

  3. TS学习随笔(二)->类型推论,联合类型

    这篇内容指南:        -----类型推论  -----联合类型 类型推论 第一篇中我们看了TS的基本使用和基本数据类型的使用,知道了变量在使用的时候都得加一个类型,那我们可不可以不加呢,这个嘛 ...

  4. JavaSE 第二次学习随笔(四)

    ---------------------------------------------------------------------------------------------------- ...

  5. JS学习笔记 (四) 数组进阶

    1.基本知识 1.数组是值的有序集合.每个值叫做一个元素,而每个元素在数组中的位置称为索引,以数字表示,以0开始. 2.数组是无类型的.数组元素可以是任意类型,并且同一个数组中的不同元素也可能有不同的 ...

  6. TS学习随笔(七)->声明文件

    now我们来看一看TS怎么声明文件, 在JS里面我们经常会使用各种第三方类库,引入方式也不太相同,常见的就是在HTML中通过script标签引入,然后就可以使用全局变量$或者jQuery了 我们通常这 ...

  7. TS学习随笔(三)->接口

    终于来到了比较重要的知识,接口,有多重要呢,反正是很重要好啵 在 TypeScript 中,我们使用接口(Interfaces)来定义对象的类型. 那什么是接口呢,在面向对象语言中,接口(Interf ...

  8. TS学习随笔(一)->安装和基本数据类型

    去年学过一段时间的TS,但由于在工作中不常用.就生疏了,最近项目要求用TS,那我就再回去搞搞TS,写一篇记录一下自己学习TS的进度以及TS知识点 首先,关于TS的定义我就不在这描述了,想看百度一下你就 ...

  9. android 学习随笔四(数据库存储)

    SQLite数据库(sqliteexpert工具),sqlite数据库是轻量级数据库,对数据类型要求不是很严格,在数据库中处理是按verchar类型处理,一般定义表字段时还是要求严格按照数据类型定义, ...

随机推荐

  1. nova boot from volume代码分析

    首先要创建一个bootable volume curl -i http://16.158.166.197:8776/v1/c24c59846a7f44538d958e7548cc74a3/volume ...

  2. 【RL-TCPnet网络教程】第32章 RL-TCPnet之Telnet服务器

    第32章      RL-TCPnet之Telnet服务器 本章节为大家讲解RL-TCPnet的Telnet应用,学习本章节前,务必要优先学习第31章的Telnet基础知识.有了这些基础知识之后,再搞 ...

  3. 【安富莱原创开源应用第2期】基于RL-USB和RL-FlashFS的完整NAND解决方案,稳定好用,可放心用于产品批量

    说明:0. NAND Flash这块经常有人咨询,这里发布一个完整的解决方案,支持擦写均衡,坏块管理,ECC和掉电保护.        早期的时候我们是用的自己做的NAND算法,支持滑块管理,擦写均衡 ...

  4. [Swift]LeetCode867. 转置矩阵 | Transpose Matrix

    Given a matrix A, return the transpose of A. The transpose of a matrix is the matrix flipped over it ...

  5. Java第三次上机随笔

    就记录一下新的收获吧~ 1.定点数(BigDecimal) 先区分一下浮点数和定点数: 浮点数(float/double):小数点可以任意浮动,称为浮点表示法 定点数(BigDecimal):一种数约 ...

  6. Python——day14 三目运算、推导式、递归、匿名、内置函数

    一.三目(元)运算符 定义:就是 if...else...语法糖前提:简化if...else...结构,且两个分支有且只有一条语句注:三元运算符的结果不一定要与条件直接性关系​ cmd = input ...

  7. SignalR学习笔记(五) 横向扩展之SQL Server

    当一个Web应用程序达到一台服务器能力限制,即请求处理数量限制之后,有2种解决方案:纵向扩展和横向扩展. 纵向扩展即用更强的服务器(或虚拟机),或为当前的服务器添加更多的内存,CPU等 横向扩展即添加 ...

  8. Python和C++的混合编程(使用Boost编写Python的扩展包)

    想要享受更轻松愉悦的编程,脚本语言是首选.想要更敏捷高效,c++则高山仰止.所以我一直试图在各种通用或者专用的脚本语言中将c++的优势融入其中.原来贡献过一篇<c++和js的混合编程>也是 ...

  9. [工具]PyCharm激活、注册码无效解决办法

    前言 我是个 Pythoner,开发工具一直使用的 JetBrains 的 PyCharm.我师傅告诉过我:一个程序员一定要有一个用的很 6 的 IDE,你的开发效率会提高很多,很多... 我从小白的 ...

  10. 《HelloGitHub月刊》第 04 期(秋招临近,本期加入了面试相关的项目)

    兴趣是最好的老师,而<HelloGitHub> 就是帮你找到兴趣! 因为我比较熟悉python语言,所以月刊中python语言的项目居多,个人能力有限,其他语言涉及甚少,欢迎各路人士加入, ...