我刚刚开始使用打字稿并面临下一个实现问题。我正在尝试实现一个将另一个类作为参数的类。问题是它可以是任何类,但我想指定一些可能的类属性或方法。假设这个类可以有singleton
静态属性。我尝试使用类泛型:
type Class<T> = new (...args: any[]) => T;
class ClassResource {
private _resource;
private _singleton;
constructor(resource: Class<any>) {
this._resource = resource;
this._singleton = resource.singleton;
}
// some methods
getClassInstance() {
return new this._resource();
}
}
但得到下一个错误:
“类”类型上不存在属性“单例”
如何正确键入这个“抽象”类并仅描述一些特定的可能属性,但不限于它们?
您所要做的就是在您的类型中提及该类必须具有单例属性。
type _Class<T>= new (...args: any[]) => T;
type ClassType<T> = _Class<T> & {
singleton: T
}
class ClassResource {
private _resource;
private _singleton;
constructor(resource: ClassType<any>) {
this._resource = resource;
this._singleton = resource.singleton;
}
// some methods
getClassInstance() {
return new this._resource();
}
}
class A {
static singleton = new A();
getHello() {
return ''
}
}
new ClassResource(A); //works
class B {
getHello() {
return ''
}
}
new ClassResource(B); // doesn't work
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句