Pac*_*chu 37 typescript reactjs
我在我的项目中使用TypeScript,但我遇到了一个问题.我正在定义这样的界面:
interface IModuleMenuItem {
name: string;
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个从这个接口实现的类,但我希望该名称是这样的私有属性:
class ModuleMenuItem implements IModuleMenuItem {
private name: string;
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
类ModuleMenuItem错误地实现了接口IModuleMenuItem.属性名称在ModuleMenuItem类型中是私有的,但在类型IModuleMenuItem中不是.
在实现接口时,如何将属性定义为私有或受保护?
Iva*_*tev 41
接口定义了"公共"合同,因此在接口上拥有protected或private访问修饰符是没有意义的,接口更多的是让我们称之为实现细节.因此,您无法通过界面执行所需操作.
如果您想要将属性设置为只读给消费者,但是在子类中可以覆盖,那么您可以执行以下操作:
interface IModuleMenuItem {
getName(): string;
}
class ModuleMenuItem implements IModuleMenuItem {
private name;
public getName() {
return name;
}
protected setName(newName : string) {
name = newName;
}
}
Run Code Online (Sandbox Code Playgroud)
我认为在TypeScript 2.0(尚未推出)中,readonly如果您在初始化时间readonly字段之后,您将能够使用访问修饰符 - https://basarat.gitbooks.io/typescript/content/docs/types/readonly.html
interface IModuleMenuItem {
readonly name : string;
}
class ModuleMenuItem implements IModuleMenuItem {
public readonly name : string;
constructor() {
name = "name";
}
}
Run Code Online (Sandbox Code Playgroud)
我想你可能会这样
interface IModuleMenuItem{
name: string
}
class ModuleMenuItem implements IModuleMenuItem {
private _name: string;
constructor() {
_name = "name";
}
get name(){
// your implementation to expose name
}
set name(value){
// your implementation to set name
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25762 次 |
| 最近记录: |