这是我的代码。
class BaseClass {
// some static method
static someMethod() {
}
}
class ChildClass extends BaseClass{
}
class AnotherClass {
protected variable: BaseClass; // It works while the type is any
protected someFunction() {
return this.variable.someMethod(); // Editor shows that there's no someMethod in BaseClass
}
}
问题是,我希望AnotherClass中的受保护变量存储类函数,而不是类实例。
有可能吗?
谢谢。
对不起,我的英语不好。
答案 0 :(得分:0)
在您的示例中,variable
属性是BaseClass
的实例,而不是类本身。
variable
的类型必须是BaseClass
的类型,即typeof BaseClass
:
class AnotherClass {
protected variable: typeof BaseClass;
public constructor(v: typeof BaseClass) {
this.variable = v;
}
protected someFunction() {
return this.variable.someMethod();
}
}
const a: AnotherClass = new AnotherClass(BaseClass);
答案 1 :(得分:0)
此错误是由tsc而非编辑器引起的。
指出代码中的一些问题。
class AnotherClass {
protected variable: BaseClass; // This is mean variable is instance of BaseClass
protected someFunction() {
return this.variable.someMethod(); // So you cannot access a static method of an instance
}
}
如果要访问类的静态方法。您应该从类对象而不是类的实例调用。因此,您应该将变量成员的类型从BaseClass
修改为typeof BaseClass
以下是一个简单的示例。为了简化概念,我修改了成员的封装。
class BaseClass {
static someMethod(): void {}
}
class DeriveClass extends BaseClass {
}
class AnotherClass {
public variable: typeof BaseClass = BaseClass;
public someFunction() {
return this.variable.someMethod();
}
}
let instance = new AnotherClass();
instance.variable = DeriveClass; // This is accepted, because DeriveClass extended from BaseClass
instance.someFunction();