TypeScript入门到精通——TypeScript类型系统基础——对象类型
对象类型
在 JavaScript 中存在这样一种说法,那就是 "一切皆为对象"。有这种说法是因为 JavaScript 中绝大多数值都可以使用对象来表示。例如:函数、数组和对象字面量本质上都是对象。对于原始数据类型、如 String 类型,JavaScript 也提供了相应的构造函数来创建能够表示原始值的对象。例如,下例中使用内置的 String 构造函数构建了一个表示字符串的对象,示例如下:
1 | const hi = new String( 'hi' ) |
我们介绍三种基本的对象类型:
1、Object 类型(首字母为大写字母 O)
2、object 类型(首字母为小写字母 o)
3、对象类型字面量
1、Object
这里的 Object 指的是 Object 类型,而不是 JavaScript 内置的 "Object()" 构造函数。这里一定要区分两者,Object 类型表示一种类型,而 "Object()" 构造函数表示一个值。因为 "Object()" 构造函数是一个值,所以它也有自己的类型。
1 2 3 4 5 | let obj1 = new Object(); let obj2 = {key: "value" }; console.log( typeof obj1); // "object" console.log( typeof obj2); // "object" |
这里我们可以看到,无论是通过 "Object()" 构造函数还是通过字面量创建的对象,它们的类型都是 "object"。"Object" 指的是一种类型(所有的对象都是这种类型的实例),而 "Object()" 是一个构造函数,用于创建新的对象实例。虽然它们都叫 "Object",但它们的含义完全不同。
在TypeScript中,Object
类型代表了所有对象。你可以使用Object
类型来声明一个对象变量,这个变量可以接受任何类型的对象。
1 2 | let myObject: Object; myObject = { a: 1, b: '2' , c: true }; // 正确,因为所有类型都是 Object 的子类型 |
2、object
在 TypeScript 2.2 版本中,增加了一个新的 object 类型表示非原始类型。object 类型使用 object 关键字作为标识,object 类型名中的字母全部为小写。
1 | const point: object = {x:0, y:0} |
1 2 | let myObject: object; // 等同于 let myObject: {} myObject = { a: 1, b: '2' , c: true }; // 正确,因为所有对象都是 object 的实例 |
3、字面类型字面量
你可以使用对象字面量来定义一个对象类型。
1 2 | let myObject: { a: number, b: string, c: boolean }; // 定义了一个具有三个属性的对象类型 myObject = { a: 1, b: '2' , c: true }; // 正确,因为符合定义的类型 |
注意:如果你只定义了一部分属性,那么其他未定义的属性将被允许存在,但你不能访问未定义的属性。这被称为可选属性。例如:
1 2 3 4 | let myObject: { a: number, b?: string }; // 'b' 是可选的,如果存在则必须为 string 类型,如果不存在则不能访问 myObject = { a: 1 }; // 正确,因为 'b' 是可选的 myObject = { a: 1, b: '2' }; // 正确,因为 'b' 是可选的,且其类型为 string console.log(myObject.b); // 错误,因为 'b' 不存在 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具