我在项目中使用TypeScript,但遇到了一个问题。我正在定义这样的接口:
interface IModuleMenuItem { name: string; }
我想创建一个从该接口实现的类,但我希望该名称成为这样的私有属性:
class ModuleMenuItem implements IModuleMenuItem { private name: string; }
我收到以下错误:
类ModuleMenuItem错误地实现了接口IModuleMenuItem。属性名称在ModuleMenuItem类型中是私有的,但在IModuleMenuItem类型中则不是。
在实现接口时如何将属性定义为私有或受保护?
接口定义了“公共”合同,因此在接口上拥有protected或private访问修饰符没有任何意义,更多的是实现细节。因此,您无法使用界面执行所需的操作。
protected
private
如果要使该属性对使用者只读,但可在子类中重写,则可以执行以下操作:
interface IModuleMenuItem { getName(): string; } class ModuleMenuItem implements IModuleMenuItem { private name; public getName() { return name; } protected setName(newName : string) { name = newName; } }
我认为在TypeScript 2.0(尚未发布)中,readonly如果您在初始化时只读字段之后可以使用access修饰符-https: //basarat.gitbooks.io/typescript/content/docs/types/readonly.html
readonly
interface IModuleMenuItem { readonly name : string; } class ModuleMenuItem implements IModuleMenuItem { public readonly name : string; constructor() { name = "name"; } }