object、Object和{}三个类型是有差别的

Object

Object类型是所有Object类的实例的类型,由以下两个接口来定义

  • Object接口定义了Object.prototype原型对象上的属性;
  • ObjectConstructor接口定义了Object类的属性, 如Object.create()

Object类型和原型链有关,因为原型链顶层就是Object,所以所有基本类型和引用类型最终都指向Object

1
2
3
4
5
6
7
8
9
let a: Object
a = 114 // OK
a = "yajue" // OK
a = false // OK
a = {} // OK
a = {b:514} // OK
a = [] // OK
a = ()=> {} // OK
a.c = 1919 // 不OK

object

object代表所有引用类型,例如数组、对象、函数等,常用于泛型约束

1
2
3
4
5
6
7
let a: object
a = 114 // 不OK
a = "yajue" // 不OK
a = false // 不OK
a = {} // OK
a = [] // OK
a = ()=> {} // OK

{}

相当于new Object(),就和Object类型基本一样,包含几乎所有类型,但只能被整体赋值,不能修改属性和方法

1
2
3
4
5
6
7
8
9
let a: {}
a = 114 // OK
a = "yajue" // OK
a = false // OK
a = {} // OK
a = {b:514} // OK
a = [] // OK
a = ()=> {} // OK
a.c = 1919 // 不OK