前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >攀爬TS之路(三) 数组类型、元组类型

攀爬TS之路(三) 数组类型、元组类型

作者头像
赤蓝紫
发布2023-03-16 14:25:32
5170
发布2023-03-16 14:25:32
举报
文章被收录于专栏:clz

攀爬TS之路(三) 数组类型、元组类型

数组类型

数组类型有多种定义方式。

普通法

这个方法基本上和其他静态语言的使用差不多

数组使用联合类型(这个看的教程没有这种用法,有问题可以评论交流)

数组泛型

使用数组泛型(Array<type>)来定义数组。

代码语言:javascript
复制
let nums: Array<number | string> = [1, 2, 3]

nums.push(2)
nums.push('3')

console.log(nums)       //  [1, 2, 3, 2, '3']

nums.push(true)     // 这里报错,因为定义的数组类型里不包括`boolean`类型

接口

数组就是一个特殊的对象,它的键是数字,且是从0开始。所以我们也可以使用接口来表示数组。

代码语言:javascript
复制
interface IArray {
    [index: number]: number | string
}

const arr: IArray = [1, 2, 'hello']

console.log(arr)

使用接口表示数组有很大问题:不能调用数组的方法

没想到好的解决方案,有想法的可以评论一下(虽然不建议用这个)

元组类型

元组在赋值时,需要提供元组类型中指定的项。

代码语言:javascript
复制
const tuple: [number, string, number | string] = [1, '2', 'hello']  // 正常

// const tuple: [number, string, number | string] = [1, '2']   // 报错:不能将类型“[number, string]”分配给类型“[number, string, string | number]”。源具有 2 个元素,但目标需要 3 个。

// const tuple: [number, string, number | string] = [1, '2', 'hello', 4]   // 不能将类型“[number, string, string, number]”分配给类型“[number, string, string | number]”。源具有 4 个元素,但目标仅允许 3 个。

这么一看,就像是一个固定大小和元素类型的数组。 但是,因为TS是JS的超集,所以元组能够使用数组的方法,即我们可以通过数组的方法让该元组不再固定大小。(这里说实在有点迷,赋值的时候元组大小固定,调方法又能让元组大小不固定)

代码语言:javascript
复制
let tuple: [number, string, number | string]

tuple = [1, 'hello', 3]

tuple.push('123')
console.log(tuple)  //  [1, 'hello', 3, '123']

当我们添加越界的元素时,类型会被限制成元组中每个类型的联合类型。

代码语言:javascript
复制
let tuple: [number, boolean]

tuple = [1, true]

tuple.push(true) //  允许越界

tuple.push('123')   // 报错:允许越界。但是越界的元素需要是元组中每个类型的联合类型
console.log(tuple)  
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 攀爬TS之路(三) 数组类型、元组类型
    • 数组类型
      • 普通法
      • 数组泛型
      • 接口
    • 元组类型
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档