TypeScript 的对象类型也有 大写 Object小写 object 两种

Object 类型

大写的 Object 类型代表 JavaScript 语言里面的广义对象。所有可以转成对象的值,都是 Object 类型,这囊括了几乎所有的值

Object 类型 | object 类型 - 图1

事实上,除了 undefined 和 null 这两个值不能转为对象,其他任何值都可以赋值给 Object 类型

Object 类型 | object 类型 - 图2

另外,空对象 {}Object 类型的简写形式,所以使用 Object 时常常用空对象代替

Object 类型 | object 类型 - 图3

object 类型

小写的 object 类型代表 JavaScript 里面的狭义对象,即可以用字面量表示的对象,只包含对象、数组和函数,不包括原始类型的值

Object 类型 | object 类型 - 图4

大多数时候,我们使用对象类型,只希望包含真正的对象,不希望包含原始类型。所以,建议总是使用小写类型 object,不使用大写类型Object。注意,**无论是大写的 Object 类型,还是小写的 object 类型,都只包含 JavaScript 内置对象原生的属性和方法用户自定义的属性和方法都不存在于这两个类型之中**

Object 类型 | object 类型 - 图5

上面示例中,toString()对象的原生方法,可以正确访问。foo自定义属性,访问就会报错