【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 的类型系统非常强大和灵活,这只是其类型特性的一部分。它支持从最简单到最复杂的类型定义和操作,使得开发者可以在编译时捕捉到各种类型错误。
相关推荐
腾讯TNTWeb前端团队34 分钟前
helux v5 发布了,像pinia一样优雅地管理你的react状态吧
前端·javascript·react.js
范文杰4 小时前
AI 时代如何更高效开发前端组件?21st.dev 给了一种答案
前端·ai编程
拉不动的猪4 小时前
刷刷题50(常见的js数据通信与渲染问题)
前端·javascript·面试
拉不动的猪4 小时前
JS多线程Webworks中的几种实战场景演示
前端·javascript·面试
FreeCultureBoy5 小时前
macOS 命令行 原生挂载 webdav 方法
前端
uhakadotcom6 小时前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom6 小时前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom6 小时前
React与Next.js:基础知识及应用场景
前端·面试·github
uhakadotcom6 小时前
Remix 框架:性能与易用性的完美结合
前端·javascript·面试
uhakadotcom6 小时前
Node.js 包管理器:npm vs pnpm
前端·javascript·面试