我在我的项目中使用TypeScript时遇到了一个问题。我正在定义一个如下所示的接口:
interface IModuleMenuItem {
name: string;
}
我想创建一个从这个接口实现的类,但是我希望名称是一个私有属性,如下所示:
class ModuleMenuItem implements IModuleMenuItem {
private name: string;
}
我收到以下错误:
类ModuleMenuItem未正确实现接口IModuleMenuItem。属性名称在类型ModuleMenuItem中是私有的,但在类型IModuleMenuItem中不是。
在实现接口时,如何将属性定义为private或protected?
6条答案
按热度按时间7z5jn7bk1#
接口定义了“公共”契约,因此在接口上使用
protected
或private
访问修饰符是没有意义的,我们称之为实现细节,因为这个原因,你不能对接口做任何你想做的事情。如果你想让属性对使用者只读,但在子类中可以重写,那么你可以这样做:
我认为在TypeScript2.0(尚未发布)中,如果您在初始化时只读字段-https://basarat.gitbooks.io/typescript/content/docs/types/readonly.html之后,您将能够使用
readonly
访问修饰符6yjfywim2#
我想你可以这样做
kkih6yb83#
如果类中有私有字段,则需要为该字段引入setter和get方法,如下所示:
然后像往常一样创建接口(我们不能对接口字段使用private修饰符),如下所示:
然后将其实现到我们的类中,如下所示:
TypeScript将理解此模型在接口中正确实现,因为我们已经引入了set和get方法。
vxqlmq5t4#
拥有内部状态并将接口分配给它而不是类并使该状态私有的唯一方法
bis0qfac5#
作为Syntax响应的补充,不需要包含setter,只需要getter方法,例如,这可以用于在初始化时设置的只读变量,尽管我认为在这种情况下使用
readonly
修饰符更好。9avjhtql6#
请改用抽象类。
合成胜于继承。