【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 的类型系统非常强大和灵活,这只是其类型特性的一部分。它支持从最简单到最复杂的类型定义和操作,使得开发者可以在编译时捕捉到各种类型错误。
相关推荐
万叶学编程3 小时前
Day02-JavaScript-Vue
前端·javascript·vue.js
前端李易安5 小时前
Web常见的攻击方式及防御方法
前端
PythonFun5 小时前
Python技巧:如何避免数据输入类型错误
前端·python
知否技术5 小时前
为什么nodejs成为后端开发者的新宠?
前端·后端·node.js
hakesashou5 小时前
python交互式命令时如何清除
java·前端·python
天涯学馆5 小时前
Next.js与NextAuth:身份验证实践
前端·javascript·next.js
HEX9CF5 小时前
【CTF Web】Pikachu xss之href输出 Writeup(GET请求+反射型XSS+javascript:伪协议绕过)
开发语言·前端·javascript·安全·网络安全·ecmascript·xss
ConardLi5 小时前
Chrome:新的滚动捕捉事件助你实现更丝滑的动画效果!
前端·javascript·浏览器
ConardLi6 小时前
安全赋值运算符,新的 JavaScript 提案让你告别 trycatch !
前端·javascript