三(四)ts非基础类型(数组)

数组作为我们最常用的数据结构之一,在ts里面存在众多定义方法。

普通声明

//声明一个空数组且不能改变
let arr:[] = [] 
// arr.push(1)

// 声明一个已知元素类型的数组(普通法)
let arr1:number[] = []
arr1.push(1)
//arr1.push('1') 报错

// 声明一个已知元素类型的数组(泛型法)
let arr2: Array<number> = []
arr2.push(1)
//arr1.push('1') 报错

// 声明一个对象数组(允许所有对象)
let arr3: object[] = []
arr3.push({
    
    name: 'fufu'})
arr3.push(new Date())
// arr3.push(1)  报错

// 声明一个具体属性的对象数组
let arr4: {
    
    name: string}[] = []
arr4.push({
    
    name: 'fufu'})
// arr4.push({age: 'fufu'}) 报错 

元组声明

有时候我们需要在数组里存放不同类型的元素,如果我们知道一个数组的所有属性类型与数组长度,通常使用将数组定义为元组

let arr5:[string, number]
arr5 = ['1', 1]
// arr5 = ['1', 1, 2] 报错
// arr5 = [1, 2]报错

arr.push(1)  //成功

注意虽然元组在定义的时候就已经确定了长度,但是使用push等方法还是可以添加元素。

接口声明

interface Arr {
    
    
    0: string,
    1: number
}
let arr6: Arr = ['1', 1]
// arr6.push(1) 报错

通过接口定义的类型类似与元组,但是不允许进行push等任何改变数组长度的操作。

我们往往通过接口可以实现一些复杂数组类型的定义

定义一个任意长度和具体属性对象数组

interface ObjArr {
    
    
    [index: number]: {
    
    
        name: string,
        age: number
    }
}

let arr7:ObjArr = [{
    
    name: 'fufu', age: 20}, {
    
    name: 'dandan', age: 20}]

定义一个任意长度和任意属性的对象数组

interface ObjArr2 {
    
    
    [index: number]: {
    
    
        [propName: string]: any
    }
}

let arr8:ObjArr2 = [{
    
    name: 'fufu'}, {
    
    name: 'dandan', age: 20}]

猜你喜欢

转载自blog.csdn.net/qq_44473483/article/details/134943545