首页 文章

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

提问于
浏览
0

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

这个例子看起来像:

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

我们现在有两种可能性:

  • 创建实例 let bar = new Tiger('foo', 'bar')

  • 修改构造函数属性 Tiger.leg = 4

second will throw an error with my current type 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 而不是 ConstructFactoryTiger.leg 将不会抛出错误,但现在我无法创建实例,因为构造函数定义丢失了 .

1 回答

  • 1

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

    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')
    

相关问题