我有一个抽象类,它具有几个可选方法。行为的更改取决于从其继承的类上是否存在任何/所有这些方法。在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
是一种方法,而不是自绑定属性。
答案 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();