typeScript 数组类型(五)
typeScript 数组类型声明分默认数组类型和数组泛型声明,下面一一介绍
基础数组类型声明
// 声明数组类型 全数字类型 let arr: number[] = [1, 2, 4, 5, 7] // 这么写会报错的 不可以指定字符串类型作为数组的值 let arr1: number[] = [1, 2, 3, 4, '23323'] // 解决上面的类型 可以采用联合类型 let arr2: (number | string)[] = [1, 2, 3, 5, '2222'] // 或者采用any类型制定 let arr3: any[] = [1, 2, 3, 5, '2222']
那么什么数组泛型呢
规则 Array<类型> 类似这种
// 数组泛型的定义方式 let arr4:Array<number> = [1,2,3,4,5,6]
如何数组中包含多种类型可以这么定义
// 如果是多种数据混合的时候 let arr5: Array<number|string> =[1, 2, 3, '4', 5, 6]
那么还有其他方式来定义数组吗?有,那就是用接口来模拟
如下代码
interface numberArr{
[index:number]:number
}
let a:numberArr = [1,2,3,4,5,6,7]
//表示:只要索引的类型是数字时,那么值的类型必须是数字。
那么通过接口模拟数组,如何表示多个多种数据类型呢,我们可以尝试这么做
interface NumberOrStringArr{ [index:number]:number|string } let b:NumberOrStringArr = [1, 2, 3, '4', 5, 6]
上述这么写也是可以的
那如何表示多维数组呢
如果是二维数组,我们可以这么表示,前面的两个中括号数量就代表数组的维度
let data:number[][] = [[1,2], [3,4]];
那么一些类数组改如何表示呢,比如arguments这种,下面我来介绍这种数组的表示方式
function fnArr(...args: any): void { //错误的arguments 是类数组不能这样定义 let arr: number[] = arguments console.log('arr :>> ',arr); } fnArr(111, 222, 333)
比如我们声明上面这个函数,发现会报错,报错如下
意思是类数组并不具备真实数组的方法,那么也就没办使用帧数数组的定义的方式来定义它,我们可以这么改造(使用ts内置对象IArguments 定义)
function fnArr(...args: any): void { //ts内置对象IArguments 定义 let arr: IArguments = arguments } fnArr(111, 222, 333)
实际上ts内置的这个对象实现是这样的
//其中 IArguments 是 TypeScript 中定义好了的类型,它实际上就是: interface IArguments { [index: number]: any; length: number; callee: Function;
}
通过接口模拟出了arguments的特性
那么如果数组是任务类型的怎么办,就使用any:[] 定义即可
let anyArr:any[] = [1,'222',{a:1}]
下一节我们学习函数扩展