Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.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
Javascript TypeScript在派生类中隐藏受保护的类方法_Javascript_Typescript_Class_Inheritance_Encapsulation - Fatal编程技术网

Javascript TypeScript在派生类中隐藏受保护的类方法

Javascript TypeScript在派生类中隐藏受保护的类方法,javascript,typescript,class,inheritance,encapsulation,Javascript,Typescript,Class,Inheritance,Encapsulation,我有这样的类层次结构: abstract class Base { private b: string; abstract protected x() {} abstract pub(): void; } class D1 extends Base { private d: number; protected x() { ... } pub() {} } 我需要向API使用者公开一个派生类: class D2 extends D1 { } 。。。但我不希望D2的用户

我有这样的类层次结构:

abstract class Base {
  private b: string;
  abstract protected x() {}
  abstract pub(): void;
}

class D1 extends Base {
  private d: number;
  protected x() { ... }
  pub() {}
}
我需要向API使用者公开一个派生类:

class D2 extends D1 {
}

。。。但我不希望
D2
的用户使用其超类的受保护/私有成员(意外或故意)。但是,
D2
必须具有访问公共超类成员的权限。是否可以隐藏内部(通过符号或其他方式?)同时仍使D1的
(新D2())实例通过检查?我可以更改任何私有/受保护的内部构件,但公共API需要保持不变。

“我不希望D2的用户使用其超类的受保护/私有成员”。。。这正是受保护/私有的目的。你是说你不希望D2本身能够使用这些方法吗?是的,我被迫使用继承层次结构,但我不希望D2的用户践踏方法或重新定义它们。这并没有让我真正明白什么是“D2的用户”?你是说写
X类扩展D2
的人还是写
newd2()
的人?用户会写
D2类扩展D1{}
(还有许多其他扩展
D1
)。我希望它们的派生类是D1的
实例,但不能破坏D1和Base的受保护成员。例如,
classx扩展了D1{X(){return 5;}
clobbers
D1.X
inside
X
如果客户端没有使用TS,除了true(
#foo
)之外,您可能无法做很多事情来防止它们恶意地戳内部,尽管符号可能有助于防止意外的clobbering(虽然根据我的经验,在TypeScript中更难使用)。当代码编译为JS时,任何
私有的
/
受保护的
/
公共的
注释都会被删除。