从父级访问继承的类的成员

时间:2018-12-11 22:57:32

标签: typescript inheritance

我有一个抽象类,它具有几个可选方法。行为的更改取决于从其继承的类上是否存在任何/所有这些方法。在Javascript中,这非常简单:

class ParentClass {
    constructor() {
        if (this.doSomething) this.doSomething();
        else console.log("nothing to do!");
    }
}

class ChildClass extends ParentClass {
    doSomething() {
        console.log("doing my thing");
    }
}

const myThing = new ChildClass(); // console prints out "doing my thing"

TypeScript中的相同代码不起作用:

interface ParentClass {
    doSomething?(): void;
}

abstract class ParentClass {
    constructor() {
        if (this.doSomething) this.doSomething();
        else console.log("nothing to do!");
    }
}

class ChildClass extends ParentClass {
    doSomething = () => {
        console.log("doing my thing");
    }
}

const myThing = new ChildClass(); // console prints out "nothing to do!"

高级TypeScript不使用本机类-在ParentClass中,this只能访问在ParentClass中明确定义的成员,而self始终引用window个对象。

是否可以从其继承的类中访问子类的成员?

或者有办法绕过TypeScript的替代类结构吗?我知道可以使用函数而不是类来完成此操作,但是在我的实际用例中,ParentClass继承自React.Component,但我不完全确定该怎么做继承而不会破坏一切。

编辑:该帖子已被编辑以反映实际问题。以前,函数doSomething是一种方法,而不是自绑定属性。

1 个答案:

答案 0 :(得分:0)

doSomething不能是属性,它必须是方法。

interface ParentClass {
    doSomething?(): void;
}

abstract class ParentClass {
    constructor() {
        if (this.doSomething) this.doSomething();
        else console.log("nothing to do!");
    }
}

class ChildClass extends ParentClass {
    doSomething() {
        console.log("doing my thing");
    }
}

const myThing = new ChildClass();