【问题标题】:Declaring protected attribute in interface在接口中声明受保护的属性
【发布时间】:2015-12-29 13:16:48
【问题描述】:

是否可以在 TypeScript 接口中声明受保护的属性?

例如:

interface IsDrawable {
  // protected // <- seems to be unsupported
  cssClass: string;
}

class SomeClass implements IsDrawable {
  protected // <- errors
  cssClass: string;
}

带有“类'SomeClass'的SomeClass错误错误地实现了接口'IsDrawable'。属性“cssClass”在“SomeClass”类型中受保护,但在“IsDrawable”类型中是公共的。

【问题讨论】:

标签: typescript


【解决方案1】:

尝试理解任何语言的senseInterface

由于Interface 是任何人都可以用来访问某些类功能的架构,因此它的字段不能是私有的或受保护的

【讨论】:

  • 但如果您关注github.com/Microsoft/TypeScript/issues/…,那么显然这个问题并非没有根据。在类中设置属性的可见性而不愿意在接口中定义它仍然会导致 TypeScript 抛出这个具有误导性的错误。
【解决方案2】:

接口是一种契约,意味着你告诉你自己之外的实体你能做什么和你拥有什么,通过保护它们,你就违反了契约。

话虽这么说,您想强制实施范围为受保护的东西,您可以使用抽象类来满足这种需求。它们是 1.6 版的新功能https://github.com/Microsoft/TypeScript/issues/3578

更新

abstract 不能应用于属性,因此为了使其工作,cssClass 需要是一个可以返回字符串的方法。

【讨论】:

  • 尽管这可行,但值得注意的是抽象类方法施加了固有的限制(您可以实现多个接口但不能从多个基本抽象类继承 - 必须求助于使用组合,而组合使事情进一步复杂化)
猜你喜欢
  • 2011-10-11
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 1970-01-01
  • 2011-01-22
  • 2011-03-11
  • 2011-03-23
相关资源
最近更新 更多