我有两个类,一个派生自另一个类,在基类上我需要检查派生类是否正在实现具有特定名称的方法:
class Foo {
constructor() { }
childHasMethod() {
if(this.method) {
console.log('Yay');
} else {
console.log('Nay');
}
}
}
class Bar extends Foo {
constructor() {
super();
this.childHasMethod();
}
method() {
}
}
var bar = new Bar();
尽管操场上的线if(this.method) {
标记为红色,但它仍然有效。但是本地编译器抛出了编译错误:The property 'method' does not exist on value of type 'Foo'
。
有没有一种干净的方式来实现我想要做的事情?
答案 0 :(得分:1)
为了“偷偷溜过编译器”,您可以将this
视为动态:
(<any>this).method
我在TypeScript Playground上做了一个完整的例子。
childHasMethod() {
if((<any>this).method) {
alert('Yay');
} else {
alert('Nay');
}
}
话虽如此,让基类知道有关其子类的详细信息可能会让你进入棘手的地方。通常我会尽量避免这种情况,因为它听起来像专业化渗透到基类 - 但你可能有一个特定的事情,你比我更了解你的程序所以我不是说“不要这样做” - 只是“你确定”:)