一文读懂 TS 中 Object, object, {} 类型之间的区别

本文详细介绍了 TypeScript 中 Object, object, {} 三种类型的差异。object 类型是 TypeScript 2.2 引入的新类型,用于表示非原始类型,而 Object 类型则描述了所有 Object 类的实例。{} 类型描述了没有成员的对象,尝试访问其任意属性会触发编译错误。此外,文中还探讨了对象字面量类型和接口类型的区别。" 116957489,2081259,C语言const深入解析:从基本用法到高级应用,"['编程语言', 'C语言', '指针操作', '编译原理', '编程规范']
摘要由CSDN通过智能技术生成

创建了一个 “重学TypeScript” 的微信群,想加群的小伙伴,加我微信“semlinker”,备注重学TS。

本文是 ”重学TS“ 系列,第 27 篇文章,感谢您的阅读!

TypeScript 2.2 引入了被称为 object 类型的新类型,它用于表示非原始类型。在 JavaScript 中以下类型被视为原始类型:stringbooleannumberbigintsymbolnullundefined

所有其他类型均被视为非基本类型。新的 object 类型表示如下:

// All primitive types
type Primitive = string 
 | boolean | number 
 | bigint | symbol 
 | null | undefined;

// All non-primitive types
type NonPrimitive = object;

让我们看看 object 类型,如何让我们编写更精确的类型声明。

一、使用 object 类型进行类型声明

随着 TypeScript 2.2 的发布,标准库的类型声明已经更新,以使用新的对象类型。例如,Object.create()Object.setPrototypeOf() 方法,现在需要为它们的原型参数指定 object | null 类型:

// node_modules/typescript/lib/lib.es5.d.ts
interface ObjectConstructor {
  create(o: object | null): any;
  setPrototypeOf(o: any, proto: object | null): any;
  // ...
}

将原始类型作为原型传递给 Object.setPrototypeOf()Object.create() 将导致在运行时抛出类型错误。TypeScript 现在能够捕获这些错误,并在编译时提示相应的错误:

const proto = {};

Object.create(proto);     // OK
Object.create(null);      // OK
Object.create(undefined); // Error
Object.create(1337);      // Error
Object.create(true);      // Error
Object.create("oops");    // Error

object 类型的另一个用例是作为 ES2015 的一部分引入的 WeakMap 数据结构。它的键必须是对象,不能是原始值。这个要求现在反映在类型定义中:

interface WeakMap<K extends object, V> {
  delete(key: K): boolean;
  get(key: K): V | undefined;
  has(key: K): boolean;
  set(key: K, value: V): this;
}

二、Object vs object vs {}

也许令人困惑的是,TypeScript 定义了几个类型,它们有相似的名字,但是代表不同的概念:

  • object
  • Object
  • {}

我们已经看到了上面的新对象类型。现在让我们讨论 Object{} 表示什么。

2.1 Object 类型

TypeScript 定义了另一个与新的 object 类型几乎同名的类型,那就是 Object 类型。该类型是所有 Object 类的实例的类型。它由以下两个接口来定义:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵曾良

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值