在继承的类方法中使用静态属性

时间:2015-12-28 23:17:45

标签: typescript static-members

这段代码使用Babel和TypeScript进行转换,并按预期工作。

class ParentClass {
    static staticProp = true; 

    method() {
        console.log(this.constructor.staticProp);
    }
}

class ChildClass extends ParentClass {
    static staticProp = false;
}

(new ChildClass).method(); 

这里的要求是引用当前类的静态属性(通过this.constructor)而不是显式提及类,因此可以继承该方法并在子类中使用相关的静态属性。

对Babel来说没问题,TypeScript也可以编译它,但它会抛出

  

错误TS2339:属性'staticProp'在类型'Function'上不存在。

编译。

如何处理这种情况以取悦TypeScript编译器?

3 个答案:

答案 0 :(得分:10)

TypeScript目前仅支持ClassName.staticPropertyName语法。但是,an open issue要求简化它。

您也可以将staticProp包裹在吸气剂中。它很麻烦,但至少它不像语言黑客那样:

class ParentClass {
    static staticProp = true; 

    method() {
        console.log(this.staticProp);
    }

    get staticProp(): boolean { return ParentClass.staticProp; }
}

class ChildClass extends ParentClass {
    static staticProp = false; 

    get staticProp(): boolean { return ChildClass.staticProp; }
}

(new ChildClass).method(); 

答案 1 :(得分:6)

我能够使TypeScript保持沉默

class ParentClass {
    static staticProp = true; 

    method() {
        console.log((<typeof ParentClass>this.constructor).staticProp);
    }
}

答案 2 :(得分:4)

如果您愿意牺牲类型检查,可以通过索引属性来消除TypeScript编译器错误:

console.log(this.constructor["staticProp"]);