这段代码使用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编译器?
答案 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"]);