TypeScript 元组类型精简知识点

一、元组基础特性

  • 定义:TypeScript 特有类型,允许数组成员类型不同(与数组的"同类型成员"特征区分)。
  • 声明方式 :成员类型写在方括号内,需显式声明(否则会被推断为联合类型数组)。
    示例:const t: [string, number, boolean] = ['a', 1, true]。
  • 与数组的区分 :
    • 数组:类型写在方括号外(number[]),成员类型必须相同。
    • 元组:类型写在方括号内([number]),成员类型可不同。

二、元组成员规则

  • 可选成员 :尾部成员可加 ? 表示可选(可选成员必须在必选成员之后)。
    示例:type Tuple = [number, string?](可包含 1 或 2 个成员)。
  • 不定成员 :用扩展运算符(...)表示不限数量的成员,... 后需跟数组/元组。
    示例:type NamedNums = [string, ...number[]](第一个成员为字符串,后续为任意数量数值)。
    • ... 可位于元组任意位置(头部、中部、尾部)。
  • 成员命名 :可添加说明性名称(无实际作用),格式为 名称: 类型。
    示例:type Color = [red: number, green: number, blue: number]。

三、只读元组

  • 声明方式 :
    1. readonly [类型1, 类型2]
    2. Readonly<[类型1, 类型2]>(泛型工具类型)。
  • 特性:禁止修改、新增、删除成员。
  • 类型关系 :普通元组是只读元组的子类型(普通元组可赋值给只读元组,反之不行)。
    • 示例:let t: [number] = [1]; let rt: readonly [number] = t 正确;t = rt 报错。

四、成员类型与数量推断

  • 成员类型读取 :
    • 通过索引:type Tuple = [string, number]; type T = Tuple[1](返回 number)。
    • 所有成员类型:Tuple[number](返回联合类型,如 string|number)。
  • 成员数量推断 :
    • 无可选成员和 ... 时,TypeScript 可确定元组长度(如 [number, number] 长度固定为 2)。
    • 含可选成员时,推断可能的长度范围(如 [number, number?] 长度为 1|2)。
    • 含 ... 时,无法推断长度,元组会被当作数组处理(成员数量不确定)。

五、扩展运算符应用

  • 数组传参问题 :数组用 ... 传参时,因成员数量不确定可能报错(如函数需固定参数个数)。
  • 解决方法 :
    1. 将数组声明为固定长度元组:const arr: [number, number] = [1, 2]。
    2. 使用 as const 断言:const arr = [1, 2] as const(推断为只读元组 readonly [1, 2])。
相关推荐
Fly5 小时前
我来提需求,你带着 Codex 做项目:AI 全栈课程开始实战了
前端
GlobalAIagent5 小时前
外贸站上线前的技术自查清单:漏一项询盘可能消失
google·typescript·ar·go语言·seo
集智飞行5 小时前
解决mavros2 ros2版本cpu占用高的问题
java·服务器·前端
HSunR6 小时前
ruoyi 若依 自定义注解 参数校验
java·前端·数据库
拆房老料7 小时前
ONLYOFFICE也能像Microsoft Word和WPS一样分别设置中西文字体
前端·html·word·开源软件·wps
Solis程序员7 小时前
Stripe 幂等表:把「不确定的重试」变成「查表返回」
前端·安全·bootstrap·php·agent
李纲明8 小时前
WordPress 站点变慢:按 TTFB → 缓存 → 查询 → 前端 分层排查(含配置注意)
前端·缓存·性能优化·wordpress·后端开发
程序人生8888 小时前
PDF 转 Word 版式错乱、表格丢失?DocConverter Web 格式互转引擎的保真实践
前端·人工智能·opencv·机器学习·pdf·word
粥里有勺糖9 小时前
安利一下最近用的桌面“Agent” | T3 Code
前端·github·ai编程
xy34539 小时前
Axure 9.0 动态面板基本操作
前端·ui·html·axure·原型·产品设计