【问题标题】:What are the differences between the empty object type and Object?空对象类型和Object有什么区别?
【发布时间】:2014-02-19 04:43:22
【问题描述】:

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

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

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

【问题讨论】:

    标签: types typescript


    【解决方案1】:

    在 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
    【解决方案2】:

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

    我相信它们是等价的。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2021-06-04
        • 2014-03-22
        • 1970-01-01
        • 2011-11-15
        • 1970-01-01
        • 2013-05-31
        • 2018-06-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多