这段代码使用Babel和TypeScript进行转换,并按预期工作.
class ParentClass { static staticProp = true; method() { console.log(this.constructor.staticProp); } } class ChildClass extends ParentClass { static staticProp = false; } (new ChildClass).method();
这里的要求是引用当前类(through this.constructor
)的静态属性而不是显式提及类,因此可以继承该方法并在子类中使用相关的静态属性.
它可以用于Babel,TypeScript也可以编译它,但它会抛出
错误TS2339:属性'staticProp'在类型'Function'上不存在.
在编译.
如何处理这种情况以取悦TypeScript编译器?
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();
我能够让TypeScript保持沉默
class ParentClass { static staticProp = true; method() { console.log((this.constructor).staticProp); } }