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