Object、{}和object,这三种表示对象的类型很容易混淆。让我们总结一下它们的联系和区别。ObjectObject是Object.prototype的接口定义。源码中的定义如下:interfaceObject{constructor:Function;toString():字符串;toLocaleString():字符串;valueOf():对象;hasOwnProperty(v:PropertyKey):布尔值;isPrototypeOf(v:Object):布尔值;propertyIsEnumerable(v:PropertyKey):boolean;}JS中所有对象的原型链默认继承自Object.prototype,原始值都有封装类型。所以数字、字符串、布尔值、符号、对象和函数都可以分配给对象类型。{}在JS{}中表示没有自己属性的文字对象。但是在TS中,{}类型代表的是对象类型,任何可以赋给Object类型的值都可以赋给{}类型。但是,这两种类型之间仍然存在差异。分配给Object类型的对象必须严格满足Object.prototype接口定义,而分配给{}类型则没有这样的限制。如下://toString()必须严格满足Object.prototype.toString()的定义,返回字符串类型。//这里会报错:Type'()=>number'isnotassignabletotype'()=>string'.leta:Object={toString(){return1;}};让b:{}={toString(){返回1;}};object是表示非原始值类型的对象,object类型是TypeScript2.2引入的。除了number、string、boolean、symbol、null和undefined之外的所有类型都可以分配给对象类型。所以根据TS的建议,当我们需要表示对象的时候,可以使用object来代替Object和{}。对象不是对象。始终使用对象!我的JS博客:WhisperingBibiJavaScript
