【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 的类型系统非常强大和灵活,这只是其类型特性的一部分。它支持从最简单到最复杂的类型定义和操作,使得开发者可以在编译时捕捉到各种类型错误。
相关推荐
AlgorithmAce1 小时前
Live2D嵌入前端页面
前端
nameofworld1 小时前
前端面试笔试(六)
前端·javascript·面试·学习方法·递归回溯
前端fighter1 小时前
js基本数据新增的Symbol到底是啥呢?
前端·javascript·面试
流着口水看上帝2 小时前
JavaScript完整原型链
开发语言·javascript·原型模式
guokanglun2 小时前
JavaScript数据类型判断之Object.prototype.toString.call() 的详解
开发语言·javascript·原型模式
GISer_Jing2 小时前
从0开始分享一个React项目:React-ant-admin
前端·react.js·前端框架
川石教育2 小时前
Vue前端开发子组件向父组件传参
前端·vue.js·前端开发·vue前端开发·vue组件传参
Embrace9242 小时前
为什么 Vue2会出现数据更新视图不更新 Vue3不会出现
javascript·vue.js·ecmascript
qq_415628172 小时前
bpmn.js显示流程图
javascript·vue.js·流程图
GISer_Jing2 小时前
Vue前端进阶面试题目(二)
前端·vue.js·面试