[英]Can TypeScript classes remove access to inherited methods?
类从超级 class 扩展时可以添加方法,但是它们可以做相反的事情并删除方法吗? 目标是使这些已删除的类在编译时无法访问。 我本质上是想得到(新车())。 不要在 IDE 中使用 autocomplete.drive()。
class vehicle {
drive() {
...
}
}
class car extends vehicle {
//previous attempt
private drive() { // can't modify public/private
}
}
有没有办法在编译时(tsc)防止汽车有方法驱动? 我们可以删除它或修改它的可访问性吗?
否。如评论中所述,这表明您的层次结构不正确。 派生类必须始终可以替换为其基类。
您必须考虑当有人编写这样的代码时会发生什么
function doSomething(y: Vehicle) {
y.drive();
}
let x = new Car();
doSomething(x);
您可以考虑覆盖总是会抛出错误的方法。 这样,您可以在运行时限制该函数,但不能在编译时限制。
" 在 IDE 中对人们进行 sinalize 的一种方法是在覆盖方法的文档中添加@deprecated
注释:
class MyClass {
/**
* @deprecated Please, don't use this because ...
*/
override iDontWantPeopleUsingThis() {
// Do nothing
}
}
这将在 IDE 中以删除线格式呈现该方法。
我知道这不是为了这个,但也许你无法修复你的层次结构。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.