小编典典

在Typescript中实现接口时如何定义私有属性?

reactjs

我在项目中使用TypeScript,但遇到了一个问题。我正在定义这样的接口:

interface IModuleMenuItem {
    name: string;
}

我想创建一个从该接口实现的类,但我希望该名称成为这样的私有属性:

class ModuleMenuItem implements IModuleMenuItem {
    private name: string;
}

我收到以下错误:

类ModuleMenuItem错误地实现了接口IModuleMenuItem。属性名称在ModuleMenuItem类型中是私有的,但在IModuleMenuItem类型中则不是。

在实现接口时如何将属性定义为私有或受保护?


阅读 1937

收藏
2020-07-22

共1个答案

小编典典

接口定义了“公共”合同,因此在接口上拥有protectedprivate访问修饰符没有任何意义,更多的是实现细节。因此,您无法使用界面执行所需的操作。

如果要使该属性对使用者只读,但可在子类中重写,则可以执行以下操作:

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

interface IModuleMenuItem {
     readonly name : string;
}

class ModuleMenuItem implements IModuleMenuItem {
    public readonly name : string;

    constructor() {
        name = "name";
    }
}
2020-07-22