【Typescript】关于TS中的Object、object、{}【特别容易混淆】总结

总结:

1、大小Object和{}基本等价【除了null和undefined以外的任何类型值】

2、小写的object除了原始类型【number、string、boolean、symbol、null或undefined】之外的任何类型值

在TypeScript中,Object、{}、object这两种类型有着明显的区别。

Object:这是JavaScript中的全局对象Object的类型。它可以接受任何类型的值(除了null和undefined),因为在JavaScript中,几乎所有的值都是Object的实例。例如:

TypeScript 复制代码
let a: Object = 123 // 正确
let b: Object = "hello" // 正确
let c: Object = { d: 1 } // 正确
let d: Object = [1, 2] // 正确
let e: Object = () => {} // 正确

{}:这是一个空对象类型,它表示一个没有任何属性的对象。但是,由于TypeScript的类型系统是结构化的,所以{}类型可以接受任何类型的值,因为任何类型的值都可以看作是一个没有任何属性的对象。

TypeScript 复制代码
let a: {} = 123 // 正确
let b: {} = "hello" // 正确
let c: {} = { d: 1 } // 正确
let d: {} = [1, 2] // 正确
let e: {} = () => {} // 正确

object:这是TypeScript 2.2引入的一种新类型,表示非原始类型,也就是除了number、string、boolean、symbol、null或undefined之外的类型。例如:

TypeScript 复制代码
let a: object = 123 // 错误
let b: object = "hello" // 错误
let c: object = { d: 1 } // 正确
let d: object = [1, 2] // 正确
let e: object = () => {} // 正确

总的来说,Object类型可以接受任何类型的值,object类型只能接受非原始类型的值,而{}类型可以接受任何类型的值。在大多数情况下,我们应该尽量避免使用Object和{}类型,因为它们没有提供任何类型检查的功能。相反,我们应该使用object类型或者更具体的类型(如{ d: number }),这样可以得到更好的类型检查和代码提示。

TypeScript 复制代码
let a: Object = null // 错误
let b: Object = undefined // 错误
let c: object = null // 错误
let d: object = undefined // 错误
let e: {} = null // 错误
let f: {} = undefined // 错误
复制代码
TypeScript 的类型系统是其最强大的特性之一,提供了丰富的方式来声明和组合类型。下面是 TypeScript 中常见的类型汇总:

基本类型
number: 任何数字,包括整数和浮点数。
string: 任何字符串。
boolean: 布尔值,true 或 false。
void: 表示没有任何类型,常用作函数没有返回值的类型。
undefined: 未定义值的类型。
null: 表示空值的类型。
symbol: 唯一且不变的值。
bigint: 大整数。
复合类型
数组: 如 number[] 或 Array<number>。
元组: 如 [string, number],固定长度的数组,类型不必相同。
枚举 (enum): 一组命名的数字常量。
高级类型
any: 可以是任何类型,没有具体的类型约束。
unknown: 类似于 any,但更安全,需要类型检查后才能操作。
never: 表示永远不会发生的类型。
object: 任意非原始类型。
类型别名和接口
类型别名 (type): 给类型定义一个新名字。
接口 (interface): 描述对象的形状或类的公共部分。
泛型
泛型 (Generics): 类型变量,允许在保持类型约束的同时提供灵活的类型。
联合和交叉类型
联合类型: 表示一个值可以是几种类型之一,如 string | number。
交叉类型: 将多种类型合并为一种类型,如 T & U。
特殊类型和操作符
类型守卫和类型断言: 如 typeof, instanceof, in, as 等。
索引类型查询和索引访问类型: 如 keyof T, T[K]。
条件类型: 如 T extends U ? X : Y。
映射类型: 如 { [P in keyof T]: T[P] }。
内置工具类型
TypeScript 提供了许多内置的工具类型,帮助开发者进行常见的类型转换和操作,例如 Partial<T>, Readonly<T>, Record<K, T>, Pick<T, K>, Exclude<T, U>, ReturnType<F>, InstanceType<C> 等。

其他
this 类型: 动态表示方法的调用者类型。
模块类型: 处理模块导入时的类型。
命名空间: 组织代码和类型的方式。
声明合并: TypeScript 的特性,允许合并多个同名声明。
TypeScript 的类型系统非常强大和灵活,这只是其类型特性的一部分。它支持从最简单到最复杂的类型定义和操作,使得开发者可以在编译时捕捉到各种类型错误。
相关推荐
发现一只大呆瓜5 小时前
AI流式交互:SSE与WebSocket技术选型
前端·javascript·面试
m0_719084115 小时前
React笔记张天禹
前端·笔记·react.js
Ziky学习记录6 小时前
从零到实战:React Router 学习与总结
前端·学习·react.js
wuhen_n6 小时前
JavaScript链表与双向链表实现:理解数组与链表的差异
前端·javascript
wuhen_n6 小时前
JavaScript数据结构深度解析:栈、队列与树的实现与应用
前端·javascript
我是一只puppy6 小时前
使用AI进行代码审查
javascript·人工智能·git·安全·源代码管理
颜酱6 小时前
从二叉树到衍生结构:5种高频树结构原理+解析
javascript·后端·算法
狗哥哥6 小时前
微前端路由设计方案 & 子应用管理保活
前端·架构
前端大卫7 小时前
Vue3 + Element-Plus 自定义虚拟表格滚动实现方案【附源码】
前端
却尘7 小时前
Next.js 请求最佳实践 - vercel 2026一月发布指南
前端·react.js·next.js