TypeScript:检查派生类是否实现方法

时间:2013-11-08 08:35:48

标签: reflection typescript

我有两个类,一个派生自另一个类,在基类上我需要检查派生类是否正在实现具有特定名称的方法:

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'

有没有一种干净的方式来实现我想要做的事情?

1 个答案:

答案 0 :(得分:1)

为了“偷偷溜过编译器”,您可以将this视为动态:

(<any>this).method

我在TypeScript Playground上做了一个完整的例子。

childHasMethod() {
    if((<any>this).method) {
        alert('Yay');
    } else {
        alert('Nay');
    }
}

话虽如此,让基类知道有关其子类的详细信息可能会让你进入棘手的地方。通常我会尽量避免这种情况,因为它听起来像专业化渗透到基类 - 但你可能有一个特定的事情,你比我更了解你的程序所以我不是说“不要这样做” - 只是“你确定”:)