我在项目中使用TypeScript时遇到了一个问题.

interface IModuleMenuItem {
    name: string;
}

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

class ModuleMenuItem implements IModuleMenuItem {
    private name: string;
}

我发现以下错误:

类ModuleMenuItem错误地实现了接口IModuleMenuItem.

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

推荐答案

接口定义了"公共"契约,因此在接口上使用protectedprivate访问修饰符是没有意义的,这更像是一个实现细节.由于这个原因,你不能用一个接口做你想做的事情.

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

interface IModuleMenuItem {
     getName(): string;
}

class ModuleMenuItem implements IModuleMenuItem {
    private name;

    public getName() {
        return name;    
    }

    protected setName(newName : string) {
        name = newName;
    }
}

我认为在TypeScript2.0(还没有推出)中,如果在初始化时间之后是只读字段-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";
    }
}

Typescript相关问答推荐

如何在同一页面中使用布局和提供程序?

如何在类型脚本中使用条件陈述循环

如何正确修复TypScript 4.7到4.8升级中的TS 2345编译错误

对于使用另一个对象键和值类型的对象使用TS Generics

在TypeScript中使用泛型的灵活返回值类型

泛型类型,引用其具有不同类型的属性之一

无法绑定ngModel.条件ngSwitchCase中的错误

如何在typescript中设置对象分配时的键类型和值类型

我可以以这样一种方式键入对象,只允许它的键作为它的值吗?

如何在Reaction Query Builder中添加其他字段?

部分更新类型的类型相等

TypeScrip:从对象中提取和处理特定类型的键

跟踪深度路径时按条件提取嵌套类型

如何在脚本中输入具有不同数量的泛型类型变量的函数?

如何从一个泛型类型推断多个类型

如何键入对象转换器

如何使函数参数数组不相交?

可以用任意类型实例化,该类型可能与

定义一个只允许来自另一个类型的特定字符串文字的类型的最佳方式

使用受保护的路由和入门来响应路由