【问题标题】:Typescript generics using class constructor that extends another class with static property inside a factory functionTypescript泛型使用类构造函数,在工厂函数内扩展另一个具有静态属性的类
【发布时间】:2020-08-20 03:25:12
【问题描述】:

尝试使用静态属性扩展类,但出现以下类型错误:

Property 'property' does not exist on type 'new (...args: any[]) => T'.(2339)

class A {
    static property = 'a'
}

class B extends A {}

function factory<T extends A>(type: new (...args: any[]) => T): T {
    if (type.property) { // error -> Property 'property' does not exist on type 'new (...args: any[]) => T'.(2339)
        console.log('heyyyyy')
    }

    return new type();
}

const b = factory(B);

console.log(B.property)

必须做些什么才能在没有类型错误的情况下工作?

感谢您的帮助。

【问题讨论】:

    标签: typescript generics


    【解决方案1】:

    通过@mpstv 扩展答案(并避免类型转换)

    type Constructor = new (...args: any) => any;
    
    function factory<T extends typeof A & Constructor>(type: T): InstanceType<T> {
      if (type.property) {
        console.log('heyyyyy');
      }
    
      return new type();
    }
    

    【讨论】:

      【解决方案2】:

      这个问题的答案在这里https://stackoverflow.com/a/49784147/14132148

      您的工厂将如下所示:

      function factory<T extends typeof A>(type: T): InstanceType<T> {
        if (type.property) {
          console.log('heyyyyy');
        }
      
        return new type() as InstanceType<T>;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-22
        • 2021-02-07
        • 2019-03-23
        • 2021-02-13
        • 2015-06-02
        • 1970-01-01
        • 2020-10-21
        • 1970-01-01
        相关资源
        最近更新 更多