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

Est*_*ask 7 static-members typescript

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

class ParentClass {
    static staticProp = true; 

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

class ChildClass extends ParentClass {
    static staticProp = false;
}

(new ChildClass).method(); 
Run Code Online (Sandbox Code Playgroud)

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

它可以用于Babel,TypeScript也可以编译它,但它会抛出

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

在编译.

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

Mar*_*cka 10

TypeScript目前仅支持ClassName.staticPropertyName语法.然而,有一个悬而未决的问题要求简化它.

你也可以将你包裹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(); 
Run Code Online (Sandbox Code Playgroud)


Est*_*ask 6

我能够让TypeScript保持沉默

class ParentClass {
    static staticProp = true; 

    method() {
        console.log((<typeof ParentClass>this.constructor).staticProp);
    }
}
Run Code Online (Sandbox Code Playgroud)