【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 的类型系统非常强大和灵活,这只是其类型特性的一部分。它支持从最简单到最复杂的类型定义和操作,使得开发者可以在编译时捕捉到各种类型错误。
相关推荐
范文杰13 分钟前
AI 时代如何更高效开发前端组件?21st.dev 给了一种答案
前端·ai编程
拉不动的猪21 分钟前
刷刷题50(常见的js数据通信与渲染问题)
前端·javascript·面试
拉不动的猪29 分钟前
JS多线程Webworks中的几种实战场景演示
前端·javascript·面试
FreeCultureBoy1 小时前
macOS 命令行 原生挂载 webdav 方法
前端
uhakadotcom2 小时前
Astro 框架:快速构建内容驱动型网站的利器
前端·javascript·面试
uhakadotcom2 小时前
了解Nest.js和Next.js:如何选择合适的框架
前端·javascript·面试
uhakadotcom2 小时前
React与Next.js:基础知识及应用场景
前端·面试·github
uhakadotcom2 小时前
Remix 框架:性能与易用性的完美结合
前端·javascript·面试
uhakadotcom2 小时前
Node.js 包管理器:npm vs pnpm
前端·javascript·面试
LaoZhangAI3 小时前
2025最全GPT-4o图像生成API指南:官方接口配置+15个实用提示词【保姆级教程】
前端