三(四)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}]
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值