You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中Obj[]与[Obj]两种类型声明的差异是什么?

两种TypeScript类型声明的区别

先明确我们定义的接口:

interface Obj {
  name: string;
  age: number;
}

接下来对比两种变量声明的核心差异:

1. const obj: Obj[]

这是Obj类型的普通数组,核心特点:

  • 数组可包含**任意数量(0个、1个或多个)**的Obj类型元素
  • 元素顺序无强制要求,只要每个元素符合Obj类型即可
  • 支持所有原生数组方法(如push()、map()),操作时只需保证元素类型匹配

示例:

// 全部合法
const emptyObjArr: Obj[] = [];
const singleObjArr: Obj[] = [{ name: "张三", age: 20 }];
const multiObjArr: Obj[] = [{ name: "张三", age: 20 }, { name: "李四", age: 25 }];
multiObjArr.push({ name: "王五", age: 30 });

2. const obj: [Obj]

这是长度固定为1的元组类型,核心特点:

  • 数组必须且只能包含恰好1个Obj类型元素,元素数量多/少都会触发类型报错
  • 强调固定的结构与长度,是一种更严格的类型约束
  • 虽然可以调用数组方法,但部分操作(如push())会破坏元组的长度约束,TS会给出类型提示

示例:

// 合法
const singleObjTuple: [Obj] = [{ name: "张三", age: 20 }];

// 非法:空数组不符合元组长度要求
const emptyTuple: [Obj] = [];
// 非法:元素数量超出元组固定长度
const multiTuple: [Obj] = [{ name: "张三", age: 20 }, { name: "李四", age: 25 }];

内容的提问来源于stack exchange,提问作者CCCC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 20:15:30