TS学习随笔(四)->数组的类型
少侠们,今天我们继续来搞一搞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'.
事实上常见的类数组都有自己的接口定义,如 IArguments
, NodeList
, HTMLCollection
等:
- function sum() {
- let args: IArguments = arguments;
- }
好了,以上就是TS里面的数组类型
参考文章:https://github.com/xcatliu/typescript-tutorial/blob/master/basics/type-of-array.md
TS学习随笔(四)->数组的类型的更多相关文章
- javascript学习笔记(四) Number 数字类型
数字格式化方法toFixed().toExponential().toPrecision(),三个方法都四舍五入 toFixed() 方法指定小数位个数 toExponential() 方法 用科学 ...
- TS学习随笔(五)->函数
这篇文章我们来看一下TS里面的函数 函数声明 在 JavaScript 中,有两种常见的定义函数的方式——函数声明(Function Declaration)和函数表达式(Function Expre ...
- TS学习随笔(二)->类型推论,联合类型
这篇内容指南: -----类型推论 -----联合类型 类型推论 第一篇中我们看了TS的基本使用和基本数据类型的使用,知道了变量在使用的时候都得加一个类型,那我们可不可以不加呢,这个嘛 ...
- JavaSE 第二次学习随笔(四)
---------------------------------------------------------------------------------------------------- ...
- JS学习笔记 (四) 数组进阶
1.基本知识 1.数组是值的有序集合.每个值叫做一个元素,而每个元素在数组中的位置称为索引,以数字表示,以0开始. 2.数组是无类型的.数组元素可以是任意类型,并且同一个数组中的不同元素也可能有不同的 ...
- TS学习随笔(七)->声明文件
now我们来看一看TS怎么声明文件, 在JS里面我们经常会使用各种第三方类库,引入方式也不太相同,常见的就是在HTML中通过script标签引入,然后就可以使用全局变量$或者jQuery了 我们通常这 ...
- TS学习随笔(三)->接口
终于来到了比较重要的知识,接口,有多重要呢,反正是很重要好啵 在 TypeScript 中,我们使用接口(Interfaces)来定义对象的类型. 那什么是接口呢,在面向对象语言中,接口(Interf ...
- TS学习随笔(一)->安装和基本数据类型
去年学过一段时间的TS,但由于在工作中不常用.就生疏了,最近项目要求用TS,那我就再回去搞搞TS,写一篇记录一下自己学习TS的进度以及TS知识点 首先,关于TS的定义我就不在这描述了,想看百度一下你就 ...
- android 学习随笔四(数据库存储)
SQLite数据库(sqliteexpert工具),sqlite数据库是轻量级数据库,对数据类型要求不是很严格,在数据库中处理是按verchar类型处理,一般定义表字段时还是要求严格按照数据类型定义, ...
随机推荐
- 四种常用的access连接方式
整理出四种常用的access连接方式,当然,第1种这是最常用的(推荐使用).1. set dbconnection=Server.CreateOBJECT("ADODB.CONNECTION ...
- Mesos源码分析(9): Test Framework的启动
我们以Test Framework为例子解释Framework的启动方式. Test Framework的代码在src/examples/test_framework.cpp中的main函数 首先要指 ...
- 老司机带路:《axios从入门到开车 嘀嘀~~》
前言:axios vue.axios 跨域.axios.js.axios get.axios post.axios中文文档 之前当vue更新到2.0之后,作者就宣告不再对vue-resource更新, ...
- 【安富莱专题教程第4期】SEGGER的J-Scope波形上位机软件,HSS模式简单易用,无需额外资源,也不需要写目标板代码
说明:1.在实际项目中,很多时候,我们需要将传感器或者ADC的数值以波形的形式显示.通常的解决办法是用串口上位机,USB接口上位机或者MDK的逻辑分析仪功能,使用这三种方式都比较繁琐.本期专题为大家讲 ...
- [Swift]LeetCode291. 单词模式 II $ Word Pattern II
Given a pattern and a string str, find if strfollows the same pattern. Here follow means a full matc ...
- [Swift]LeetCode820. 单词的压缩编码 | Short Encoding of Words
Given a list of words, we may encode it by writing a reference string S and a list of indexes A. For ...
- [Swift]LeetCode936. 戳印序列 | Stamping The Sequence
You want to form a target string of lowercase letters. At the beginning, your sequence is target.len ...
- 细说javascripe事件传播流程
当我们使用js时,经常会遇到事件传播流程的问题,下面我说一下我的观点. 在js触发某个事件时会相应生成一个事件对象,而这个事件对象则会根据DOM事件流的方向进传递,而传递的顺序如下图所示: 事件对象会 ...
- 死磕 java集合之ArrayList源码分析
欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. 简介 ArrayList是一种以数组实现的List,与数组相比,它具有动态扩展的能力,因此也可 ...
- linux添加C#运行环境
linux是不带C#的运行环境的,同样的还有.NET. 有一个叫做Mono的很好用http://www.go-mono.com/,有给docker,而且有环境的选择,要注意. 安好后有给样例的程序,编 ...