Types 空对象类型和对象之间有什么区别?

Types 空对象类型和对象之间有什么区别?,types,typescript,Types,Typescript,我注意到TypeScript支持使用以下类型: {}(在规范中称为空对象类型) 对象 据我所知,它们似乎都是等价的和可互换的。它们之间有什么区别?我一直理解为对象指的是JavaScript对象类型。通常用作{}或有时用作新对象 我相信它们是等价的。在TypeScript的上下文中,没有实际的区别,但有语义上的区别。对象的所有成员都隐式存在于所有对象上 {}表示没有自己成员的东西。{}仍将拥有对象的所有成员。因此,它们在打字脚本中是可互换的 // Extend ALL objects inte

我注意到TypeScript支持使用以下类型:

  • {}
    (在规范中称为空对象类型)
  • 对象

据我所知,它们似乎都是等价的和可互换的。它们之间有什么区别?

我一直理解为
对象
指的是JavaScript对象类型。通常用作
{}
或有时用作
新对象


我相信它们是等价的。

在TypeScript的上下文中,没有实际的区别,但有语义上的区别。
对象的所有成员都隐式存在于所有对象上

{}
表示没有自己成员的东西。{}仍将拥有
对象的所有成员。因此,它们在打字脚本中是可互换的

// Extend ALL objects
interface Object{
    baz:number;
}

var foo:{} = {};
var bar:Object = {};

foo.baz = 123;
bar.baz = 123;

就我个人而言,我从未将变量声明为这些变量之一。也许您应该使用与所有内容兼容的
any

作为类型注释,
{}
对象
都引用相同的类型,即空对象类型。但是,
{}
也可以用作对象文字,相当于
新对象

谢谢!您是否有任何参考资料来确认这一点?有趣的是,您使用了
any
而不是
Object
{}
。我能理解不使用
{}
,因为从你所说的来看,它看起来很有趣,而且它的语义似乎并不普遍有用。然而,我发现,如果我期望一组名称-值对作为对象提供,那么使用
对象
更具可读性。在这种情况下使用
any
对我来说可读性较差,因为从可读性的角度来看,这意味着传入
number
或其他原语是可以的。如果您使用
{}
Object
例如
foo:Object
您不能执行
foo.yourProperty=123