繁体   English   中英

TypeScript 类可以删除对继承方法的访问吗?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM