构造函数的类型定义和构造函数的属性

时间:2016-04-11 00:05:36

标签: typescript

假设我们有一个为我们创建构造函数的库。 我们可以传递一个Object作为第一个参数,这个属性将直接添加到构造函数中。

此示例可能如下所示:

let Tiger = can.Construct.extend({
    leg: 3
});

我们现在有两种可能性:

  1. 创建实例let bar = new Tiger('foo', 'bar')
  2. 修改构造函数属性Tiger.leg = 4
  3. 秒将使用我当前的类型definitios

    引发错误
      

    财产' leg'不会退出类型ConstructFactory

    我当前的类型定义如下:

    declare namespace can {
    
        interface ConstructFactory {
            new(...args: any[]): Construct;
        }
    
        class ConstructStatic {
            static extend(staticProperties: Object): ConstructFactory;
        }
    
        class Construct extends ConstructStatic {
            constructor(...args: any[]);
        }
    }
    

    如果我返回类型any而不是ConstructFactory,则Tiger.leg不会抛出错误,但现在我无法创建实例,因为构造函数定义已丢失。

1 个答案:

答案 0 :(得分:2)

我认为这可以满足您的需求:

declare namespace can {

    interface ConstructFactory {
        new(...args: any[]): Construct;
    }

    class ConstructStatic {
        static extend<T>(staticProperties: T): ConstructFactory & T;
    }

    class Construct extends ConstructStatic {
        constructor(...args: any[]);
    }
}


let Tiger = can.Construct.extend({
    leg: 3
});

Tiger.leg = 4

let bar = new Tiger('foo', 'bar')