typescript 如何更改派生类中方法的访问修饰符?

qpgpyjmq  于 2023-02-10  发布在  TypeScript
关注(0)|答案(1)|浏览(113)

我有两个类,一个继承自另一个:

class A {
    protected do() {
        console.log("do");
    }
}

class B extends class A {
    public do() {
        super.do();
    }
}

我想要的是把do()方法变成公共的,而不需要复制基类的代码或者调用super.do(),像C++这样的语言允许用修改后的访问修饰符重复声明一个方法来实现这个目的,类似于:

class A {
    protected do() {
        console.log("do");
    }
}

class B extends class A {
    public do();
}

但这会被解释为方法重载。
类似的方法在Typescript中是否可行?

oxcyiej7

oxcyiej71#

是的,可以使子类的限制性更小,而不必重新实现该方法。

class A {
    protected do() {
        console.log("do");
    }
}

interface B extends A {
    do(): void
}

class B extends A {}

const b = new B();
b.do(); //accepted

Playground链接
这将执行接口合并:

  1. class Foo {}声明运行时类型
    1.它还声明了位于环境上下文中的所述类的接口。
    1.与类分离的interface Foo {}将与同名类的接口定义合并。
    这允许改变接口是什么。特别是这里它声明了do()方法,因此它总是公共的。因为类B已经继承了do()的实现,所以不需要进行新的实现。

相关问题