假设我们有一个为我们创建构造函数的库。 我们可以传递一个Object作为第一个参数,这个属性将直接添加到构造函数中。
此示例可能如下所示:
let Tiger = can.Construct.extend({
leg: 3
});
我们现在有两种可能性:
let bar = new Tiger('foo', 'bar')
Tiger.leg = 4
秒将使用我当前的类型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
不会抛出错误,但现在我无法创建实例,因为构造函数定义已丢失。
答案 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')