类作为参数

纳扎尔

我刚刚开始使用打字稿并面临下一个实现问题。我正在尝试实现一个将另一个类作为参数的类。问题是它可以是任何类,但我想指定一些可能的类属性或方法。假设这个类可以有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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章