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
相关产品推荐
相关产品推荐

