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}]

 

下一节我们学习函数扩展

 

posted @ 2024-11-21 10:59  史洲宇  阅读(73)  评论(0)    收藏  举报