【问题标题】:Typescript interface with private members带有私有成员的 Typescript 接口
【发布时间】:2018-11-21 22:46:50
【问题描述】:

为什么 typescript 不支持接口中的私有成员?

以下情况如何处理?

interface IFoo
{
  private member: {};
}

class Foo implements IFoo
{
  private member = {};
}

【问题讨论】:

    标签: typescript


    【解决方案1】:

    接口定义了“公共契约”,它描述了类的公共方面,因此使用私有访问修饰符没有意义。

    From Typescript interface documentation:

    这禁止你使用它们来检查一个类是否也有 类实例私有端的特定类型。


    但接口可以扩展具有私有成员的类。

    来自Understanding TypeScript

    在 TypeScript 中,接口也可以扩展类,但仅限于某种方式 这涉及继承。当一个接口扩展一个类时, 接口包括所有类成员(公共和私有),但没有 类的实现。

    class Customer
    {
      private id: number;
      get Id(): number
      {
        return this.id
      }
      set Id( value: number )
      {
        this.id = value;
      }
    }
    interface ICustomer extends Customer
    {
      MiddleName: string;
    }
    

    【讨论】:

    • 感谢您的解释,但这不是语言的弱点吗?
    • @AhmedM.Kamal 以什么方式?检查实例本身是否实现了某些东西几乎没有意义,您已经可以在编辑器中自己看到它。
    • 我了解 TypeScript 接口的重点是创建公共合约,以便运行应用程序中的对象相互之间进行适当的互操作。但是,我认为如果接口也指定类的私有方面,有些人仍然会发现好处。私有合约确保正在运行的应用程序中的对象与自身进行适当的内部操作
    猜你喜欢
    • 2017-09-23
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 2019-04-17
    • 1970-01-01
    • 2014-02-19
    • 2011-03-13
    相关资源
    最近更新 更多