Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 我能';不要将从接口实现的类字段设置为私有,也不要将接口字段设置为私有_Typescript_Class_Interface - Fatal编程技术网

Typescript 我能';不要将从接口实现的类字段设置为私有,也不要将接口字段设置为私有

Typescript 我能';不要将从接口实现的类字段设置为私有,也不要将接口字段设置为私有,typescript,class,interface,Typescript,Class,Interface,我在界面上有以下字段: // Stores the to views folder VIEW_PATH: string; // Stores BrowserWindows with respective view browserWindows: [string, BrowserWindow | null][]; 当我在类中实现字段并尝试将其设置为私有时,我会出现以下错误: Class 'WindowHandler' incorrectly implements interface 'IWi

我在界面上有以下字段:

// Stores the to views folder
VIEW_PATH: string;
// Stores BrowserWindows with respective view  
browserWindows: [string, BrowserWindow | null][];
当我在类中实现字段并尝试将其设置为私有时,我会出现以下错误:

Class 'WindowHandler' incorrectly implements interface 'IWindowHandler'.
  Property 'VIEW_PATH' is private in type 'WindowHandler' but not in type 'IWindowHandler'.ts(2420)
当我尝试将接口字段设置为private时:

'private' modifier cannot appear on a type member.ts(1070)

接口本质上是公共的,因此只能有公共成员,因此它们不接受私有/受保护等定义。另一方面,接口(如类)的实现可以有私有成员/方法来描述其实现细节


您可能误解了接口的概念,接口是您与公共世界之间的一种“契约”,因此在这些契约中没有“隐藏”元素的逻辑使用,或者您试图以错误的方式使用它们。让我知道您的用例是什么,以及为什么您希望一些成员保持隐私以进一步帮助您。

作为补充回答:

TypeScript接口确实只描述公共契约。在TS术语中,他们描述了。询问者试图将接口成员私有化(他们也不是唯一一个这样做的人,请参见示例)的原因是,两个具有相同
private
成员的不相关类被认为是不兼容的,尽管它们在结构上是相同的

与类似,以下情况会导致类型错误:

class A{private A:string=”“;}
B类{private a:string=”“;}
设a=新a();
a=新的B()//类型具有私有属性“a”的单独声明。
这意味着私人成员确实对类的形状做出了贡献:

C类实现了B{//类型具有私有属性“a”的单独声明。
私人a:string=“”;
}
然而,这些类并不“共享来自同一声明的形状的私有方面”(同上)。只有子类可以与其超类共享形状的私有部分:

D类扩展了B{//OK
构造函数(){
超级();
}
}
因此,只有类具有
private
成员。这也不太可能改变为允许接口实现
受保护的
成员(本质上非常相似)的建议

另见:

  • 在私有成员和接口上
  • 讨论为什么
    私人
    成员

  • 为什么要将它们设置为私有?这样它们就无法访问…如果无法访问,则将它们从接口中删除。您试图执行的操作毫无意义。您的界面显示
    实现我的每个类都有这个字段,您可以访问它
    ,然后类显示
    哦,顺便说一句,您不能访问这个字段
    。您必须选择实际需要的字段,通过在接口中声明来公开提供字段,或者通过不在接口中声明来隐藏字段。在TS中,不仅类实现了接口,还实现了POJO。总而言之:TS不提供这种能力;对于TS来说,这毫无意义。首先,感谢您的深刻而全面的回答。我现在脑子里有了你说的话,这是有道理的。我很惊讶,因为在Java上你可以将实现的成员设置为私有或公共,所以我想知道我是否仍然可以在TypeScript中这样做。哦,现在我明白你为什么这么想了,因为Java 9中的接口比普通接口复杂得多。它们内部也可以有方法的实现。这使得它们非常复杂,这就是为什么Java9必须向它们引入私有方法的概念。因为混合实现和接口概念。Typescript中的接口不是这种情况,这些接口只是类应该如何实现东西的常用处方。