TypeScript 如何做对象键类型
写代码时,你有没有遇到过这种情况:给一个对象赋值时,键名打错了,编辑器没提醒,等到运行时才发现报了个莫名其妙的错?比如你想给用户信息对象加userName,结果写成了userNmae,要是用普通的JavaScript,可能要等到功能测试时才抓出这个问题。如果换成TypeScript,就能从根源上避免这类错误——这就得用到它的对象键类型功能了。
什么是对象键类型?用奶茶店举个例子
对象键类型简单说,就是给对象的“键”定好规矩,告诉TypeScript:这个对象只能用哪些词当键,不能乱改。

举个生活化的例子:你开了家奶茶店,有个“点单对象”,里面的键规定只能是“奶茶类型”“甜度”“冰量”这三个,就像你给客人的点单栏画了三个固定的格子,客人(开发者)只能在这三个格子里填,不能自己加“加珍珠”(除非你提前加进去),也不能写错“甜度假”。
换成TypeScript的话,就相当于给这个对象的键加上了限制,只要你写错键名,编辑器会立刻标红提醒,不用等运行才发现问题。
基础用法:给普通对象定死键
最常用的,是直接在对象类型里声明允许的键,再给每个键定对应的值类型。
比如写一个用户信息的对象,要求键只能是name(字符串)、age(数字),不能有别的键,写法很简单:
`typescript
type User = {
name: string;
age: number;
};
`
这就像给对象装了个“门禁”,只有name和age两个名字能通过,要是你写const myUser: User = { nam: "小明", age: 18 };,编辑器会马上说“‘nam’不存在于类型‘User’中”,帮你揪出拼写错误。
灵活点:允许部分自定义键的对象
有时候你需要更灵活的对象,比如一个“商品详情对象”,基础键是id和name,但还可以加各种自定义属性(比如price、库存、产地)。这时候用[key: string]: 类型的写法就行,它的意思是“除了固定键,其他键只要是字符串,值是对应类型就可以”。
比如:
`typescript
type Product = {
id: string;
name: string;
[key: string]: any; // 允许任意字符串键,值可以是任意类型
};
// 这样写是对的
const myProduct: Product = {
id: "123",
name: "奶茶",
price: 15,
库存: 100
};
`
这个用法就像奶茶店的“自定义加料区”,基础的“杯型”“甜度”是固定的,其他加料你可以自己加,TypeScript不会拦着。
进阶技巧:用枚举当键类型
如果你的键是固定的几个选项,比如订单状态只能是待付款、已付款、已发货、已完成,用枚举(enum)当键类型会更严谨,比直接写字符串键更不容易错。
写法是这样的:
`typescript
enum OrderStatus {
Pending = "待付款",
Paid = "已付款",
Shipped = "已发货",
Completed = "已完成"
}
type Order = {
orderId: string;
status: OrderStatus; // 键用枚举类型
};
// 正确写法
const myOrder: Order = {
orderId: "456",
status: OrderStatus.Paid
};
// 错误写法,会标红,因为"已付"不在枚举里
const wrongOrder: Order = {
orderId: "789",
status: "已付"
};
`
这就像奶茶店的“甜度选项”,只有全糖、半糖、无糖这几个官方选项,客人不能自己写“随便甜”,避免了模糊的输入。
学会这些对象键类型的用法,就能让你的代码少出很多低级错误,写起来更省心。