【发布时间】:2014-02-19 04:43:22
【问题描述】:
我注意到 TypeScript 支持使用以下类型:
-
{}(在规范中称为空对象类型) Object
据我所知,它们似乎都是等价的并且可以互换。它们之间有什么区别?
【问题讨论】:
标签: types typescript
我注意到 TypeScript 支持使用以下类型:
{}(在规范中称为空对象类型)Object据我所知,它们似乎都是等价的并且可以互换。它们之间有什么区别?
【问题讨论】:
标签: types typescript
在 TypeScript 的上下文中,没有实际差异,但存在语义差异。 Object 的所有成员都隐含在 all 对象上。
{} 表示没有自己的成员的东西。 {} 仍将拥有 Object 的所有成员。所以它们在 TypeScript 中是可以互换的。
// Extend ALL objects
interface Object{
baz:number;
}
var foo:{} = {};
var bar:Object = {};
foo.baz = 123;
bar.baz = 123;
就我个人而言,我从来没有声明一个变量是其中之一。也许你应该使用any,它与everything兼容。
【讨论】:
any 而不是Object 或{}。我可以理解不使用{},因为它看起来很有趣,而且它的语义似乎并不普遍有用,从你所说的。但是,例如,如果我希望将一组名称-值对作为对象提供,我发现使用 Object 更具可读性。在这种情况下使用any 对我来说可读性会降低,因为从可读性的角度来看,这意味着传入number 或其他原语是可以的。
{} 或 Object 例如foo:Object你不能做foo.yourProperty = 123。
我一直把它理解为Object 指的是JavaScript 对象类型。通常用作{} 或有时用作new Object。
我相信它们是等价的。
【讨论】:
作为类型注释,{} 和Object 都引用相同的类型,即空对象类型。但是,{} 也可以作为对象文字,相当于new Object。
【讨论】: