TypeScript 如何定义对象类型

在前端开发里,咱们写代码时最怕的就是“对象乱套”——比如想调用一个用户的名字,结果不小心写成了年龄的字段,或者把一个数字塞进了名字的位置,最后在浏览器运行时才报错。这种低级错误,其实用一个工具就能轻松避免,它就是咱们今天要聊的TypeScript。

很多前端开发者刚接触TypeScript时,会觉得它是“给代码加了层麻烦的约束”,但其实它的核心优势就是帮咱们提前找出这类错误,而定义对象类型,就是它最常用的功能之一。咱们先从最基础的用法说起。

TypeScript 如何定义对象类型

最基础的对象类型:像填表格一样定规则

你可以把对象类型想象成一张“定制表格”:先列好表格里必须有哪些项目,每个项目该填什么类型的内容,多一个少一个,或者填错类型都不行。

举个生活化的例子:咱们要做一个“学生信息登记”,规定每个学生必须有“姓名”(得是文字,不能是数字)、“学号”(得是数字,不能是汉字),还有“班级”(也是文字)。用TypeScript写出来就是这样:

`typescript

// 先定义一个学生的对象类型,就像写了一张登记表格的要求

type Student = {

name: string;

id: number;

className: string;

};

// 然后写一个学生的实际信息,必须符合刚才的表格要求

const student1: Student = {

name: "小明",

id: 20240315,

className: "高一(3)班"

};

`

要是你不小心少写了一个字段,比如漏了className,或者把id写成了“20240315”(带引号的字符串),TypeScript会直接在写代码的时候就报错,根本不用等到运行时,这就是提前避坑的好处。

可选字段:像“备注”一样可填可不填

有时候咱们的对象不是所有字段都必须有,比如学生的“兴趣爱好”,有的学生有,有的没有,这时候就可以用“可选字段”——相当于表格里的“备注”,想填就填,不想填也没关系。

还是用学生的例子,给Student类型加一个可选的hobby字段:

`typescript

type Student = {

name: string;

id: number;

className: string;

hobby?: string; // 这里的问号就是可选的意思

};

// 这个学生没填兴趣爱好,完全没问题

const student2: Student = {

name: "小红",

id: 20240316,

className: "高一(3)班"

};

// 这个学生填了兴趣爱好,也符合要求

const student3: Student = {

name: "小刚",

id: 20240317,

className: "高一(2)班",

hobby: "打篮球"

};

`

这里的hobby后面加了?,就告诉TypeScript:这个字段可以有,也可以没有,不会报错。

灵活的剩余字段:像“杂物袋”装不确定的内容

有时候咱们的对象除了几个确定的核心字段,还可能有一些不确定的额外内容,比如学生的“其他信息”,有的学生有“家长手机号”,有的有“入学时间”,这时候就可以用“索引签名”,把这些不确定的字段装在一起。

比如给学生类型加一个剩余字段:

`typescript

type Student = {

name: string;

id: number;

className: string;

[key: string]: any; // 这里的索引签名,意思是可以加任意名字、任意类型的额外字段

};

// 这个学生多了家长手机号,没问题

const student4: Student = {

name: "小丽",

id: 20240318,

className: "高一(2)班",

parentPhone: "138xxxx1234"

};

`

不过要注意,索引签名虽然灵活,但别滥用,要是核心字段已经覆盖了,就没必要加太多,不然会失去TypeScript的类型检查意义。

接口的另一种写法:适合多人协作的场景

要是你习惯用更贴合“对象模板”的写法,TypeScript还提供了interface关键字,和上面的type用法几乎一样,只是写法更像面向对象里的“接口”,适合多人协作时统一规范。比如:

`typescript

interface Student {

name: string;

id: number;

className: string;

}

const student5: Student = {

name: "小强",

id: 20240319,

className: "高一(1)班"

};

`

不管用type还是interface,核心都是一样的——给对象定好规则,让代码更严谨,减少出错的可能。

其实TypeScript定义对象类型,本质就是帮咱们把“模糊的需求”变成“明确的代码规则”,就像咱们生活里填表格时,把要填的内容和格式都写清楚,最后交出来的东西才不会乱。对于前端开发来说,这不仅能减少调试时间,还能让团队里的代码更统一,新人看的时候也能快速明白每个对象该怎么用,是个特别实用的小技巧。

上一篇 JavaScript 如何做 SSE